Since this was doing registration to a foreign DC, it needs extra time
for the route to the ACL datacenter to be set up. ACLs aren't part of
this test, so by disabling them we make this more reliable and converge
faster than if we had added a retry.
Refactor tests that use testutil.WaitForResult to use retry.
Since this requires refactoring the test functions in general this patch
also shows the use of the github.com/pascaldekloe/goe/verify library
which provides a good mechanism for comparing nested data structures.
Instead of just converting the tests from testutil.WaitForResult to
retry the tests that performing a nested comparison of data structures
are converted to the verify library at the same time.
The current retry framework in testutil/testprc.WaitForResult uses
a func() (bool, error) callback until it succeeds or times out.
It captures the last error and returns it.
if err := testutil.WaitForResult(t, func() (bool, error) {
if err := foo(); err != nil {
return false, err
}
...
return true, nil
}); err != nil {
t.Fatal(err)
}
This makes the test functions more complex than they need to be since
both the boolean and the error indicate a success or a failure.
The retry.Run framework uses a an approach similar to t.Run()
from the testing framework.
retry.Run(t, func(r *retry.R) {
if err := foo(); err != nil {
r.Fatal(err)
}
})
The behavior of the Run function is configurable so that different
timeouts can be used for different tests.
JSON validation has now been added to the update view following the same format
as create. Since 'valueDecoded' does not have the ability to check if the value
is base64 before decoding then this must be checked first; if it is base64 then
use the decoded one, if not just get the value.
Change incorrect trailing span close to label.
JSON validation added to UI. This has been implemented through the use of a flag
to enable/disable the functionality with a watcher on the value to set the
success/error class on the textarea itself.
No hard validation added to the field.
`AddAccessibleService` works just like `AddService` but also passing
"address" and "port". It is helpfu when you need to prepare a
fakeService that will be accessed later in target source code.