+
+func (s *CommandSuite) TestDump_KeyOrder(c *check.C) {
+ in := `
+Clusters:
+ z1234:
+ Login:
+ Test:
+ Users:
+ a: {}
+ d: {}
+ c: {}
+ b: {}
+ e: {}
+`
+ for trial := 0; trial < 20; trial++ {
+ var stdout, stderr bytes.Buffer
+ code := DumpCommand.RunCommand("arvados config-dump", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
+ c.Assert(code, check.Equals, 0)
+ if !c.Check(stdout.String(), check.Matches, `(?ms).*a:.*b:.*c:.*d:.*e:.*`) {
+ c.Logf("config-dump did not use lexical key order on trial %d", trial)
+ c.Log("stdout:\n", stdout.String())
+ c.Log("stderr:\n", stderr.String())
+ c.FailNow()
+ }
+ }
+}
+
+func (s *CommandSuite) TestCheck_KeyOrder(c *check.C) {
+ in := `
+Clusters:
+ z1234:
+ ManagementToken: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ SystemRootToken: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ Collections:
+ BlobSigningKey: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ InstanceTypes:
+ a32a: {}
+ a48a: {}
+ a4a: {}
+`
+ for trial := 0; trial < 20; trial++ {
+ var stdout, stderr bytes.Buffer
+ code := CheckCommand.RunCommand("arvados config-check", []string{"-config=-", "-strict=true"}, bytes.NewBufferString(in), &stdout, &stderr)
+ if !c.Check(code, check.Equals, 0) || stdout.String() != "" || stderr.String() != "" {
+ c.Logf("config-check returned error or non-empty output on trial %d", trial)
+ c.Log("stdout:\n", stdout.String())
+ c.Log("stderr:\n", stderr.String())
+ c.FailNow()
+ }
+ }
+}