lp:~dimitern/goose/nova-addresses3
- Get this branch:
- bzr branch lp:~dimitern/goose/nova-addresses3
Branch merges
- The Go Language Gophers: Pending requested
-
Diff: 60 lines (+29/-15)1 file modifiednova/nova.go (+29/-15)
Branch information
Recent revisions
- 56. By Dimiter Naydenov
-
nova: Addresses in ServerDetail
Implemented handling of public/private addresses map inside ServerDetail.
Added tests in the double to check RunServer sets the appropriate addresses.
We need this in juju-core to get the IP address of an instance.R=wallyworld, rog, gz
CC=
https://codereview. appspot. com/7228058 - 55. By Ian Booth
-
Rewrite rate limit retry tests
This branch uses the new service double control hooks introduced in the previous branch to rewrite the tests which check that rate limit exceeded retries are handled properly.
The kludge used previously to induce a retry error has been removed, and now an additional test can also be easily added to check the behaviour if too many rate limit retry responses are received.So that the tests run fast, I've allowed for the Retry-After header value to be a float (even though a real instance only assigns an int). This means the tests can specify a really
short retry time (I used 1ms).I've also re-added a rate limit retry test for use with the live instance, but improved it so that it exists as soon as the first rate limit exceeded response is received.
R=jameinel
CC=
https://codereview. appspot. com/7200049 - 54. By Ian Booth
-
Error testing infrastructure for service doubles
This branch provides infrastructure to allow tests to specify that the service
doubles should return an error at various points.
The basic premise is that the test provides a hook which is run at the specfied point in time eg when a specific function runs.
The hook is passed the service double and any function arguments. It can inspect the state of the service and the function args and
can decide to return an error if it wants to.The diff conatins a practical example of this being used - 3 security groups are
created and an error is raised when the second one is deleted.This work doesn't have to be used to raise an error - the hook can also be used to modify the sate of the service double and simply exit without error.
R=jameinel
CC=
https://codereview. appspot. com/7204055 - 51. By Ian Booth
-
Goose test infrastructure improvements
This branch improves the usabilty of the goose test infrastructure.
A full Openstack service test double is provided. A bunch of manual coding which was required in each test suite to set up various Openstack module test doubles is replaced by a few lines of code.
New code:
cred := &identity.
Credentials{ ...}
openstack := openstack.New(cred)
openstack.SetupHTTP( s.Mux) Old code:
// Create the identity service.
s.identityDouble = identityservice.NewUserPass( )
token := s.identityDouble.AddUser( s.cred. User, s.cred.Secrets)
s.Mux.Handle( baseIdentityURL , s.identityDouble) // Register Swift endpoints with identity service.
ep := identityservice.Endpoint{
AdminURL: s.Server.URL + baseSwiftURL,
InternalURL: s.Server.URL + baseSwiftURL,
PublicURL: s.Server.URL + baseSwiftURL,
Region: s.cred.Region,
}
service := identityservice.Service{ "swift" , "object-store", []identityservi ce.Endpoint{ ep}}
s.identityDouble.AddService( service)
s.swiftDouble = swiftservice.New("localhost" , baseSwiftURL+"/", token)
s.Mux.Handle( baseSwiftURL+ "/", s.swiftDouble) // Register Nova endpoints with identity service.
ep = identityservice.Endpoint{
AdminURL: s.Server.URL + baseNovaURL,
InternalURL: s.Server.URL + baseNovaURL,
PublicURL: s.Server.URL + baseNovaURL,
Region: s.cred.Region,
}
service = identityservice.Service{ "nova", "compute", []identityservi ce.Endpoint{ ep}}
s.identityDouble.AddService( service)
s.novaDouble = novaservice.New("localhost" , "V1", token, "1")
s.novaDouble.SetupHTTP( s.Mux) Other changes include:
- fix the identity service double to remove the hard coded userId and tenantId.
- do not hard code a fixed token against a service double - each user is assigned their own token just like a real instance, allowing multi-user tests to be written.
- improvements to the Swift service double to make it use URLs which are compliant with how a real Swift instance would do it.
- factor out a common base class for the legacy and userpass double implementations.
- use a SetupHTTP() for all test doubles instead of requiring the coder to know the magic URL paths to use.R=dimitern
CC=
https://codereview. appspot. com/7194043 - 50. By Martin Packman
-
Add simple tool for deleting security groups
Basic test of using the current api for doing some actual task. As the
live tests create lots of security groups without ever deleting them
it's also sort of useful to have around.R=wallyworld, jameinel, rog, dimitern
CC=
https://codereview. appspot. com/6948051 - 49. By John A Meinel
-
test.py: add a python script for running the test suite.
Also has flags for setting up the tarmac test suite.
- 48. By Ian Booth
-
Use nova service doubles in nova tests
This branch plugs the nova service doubles into the nova live tests and makes everything work.
So now, in the nova package, "go test -gocheck.v" runs the tests against the doubles, and
"go test -gocheck.v -live" uses an Openstack instance.Also, the rate limit retry test is now only run locally against the service doubles, where a special
request is used to trigger a rate limit service response. This replaces the previous test which
hammered a real Openstack instance to try and induce a rate limit response.A few things needed to be done, and as a result of implementation changes to the service doubles,
changes were also needed for the service double unit tests.Viewing highlights:
1. Default security group
A real Openstack instance always has a default security group. The nova double and associated unit tests were modified
accordingly.2. Out of the box flavours
The real Openstack instance used for testing has flavours defined out of the box. The live tests assume this behaviour
so the test double needed to be modifed to match.3. Response changes
Some changes were required to certain response data eg creating a security group rule
4. ** This issue will need a follow up change **
The security group rule response contains a SecurityGroupRef struct:
type SecurityGroupRule struct {
FromPort *int `json:"from_port"` // Can be nil
IPProtocol *string `json:"ip_protocol" ` // Can be nil
ToPort *int `json:"to_port"` // Can be nil
ParentGroupId int `json:"parent_ group_id" `
IPRange map[string]string `json:"ip_range"` // Can be empty
Id int
Group SecurityGroupRef
}The was defined as a pointer ie Group *SecurityGroupRef.
However, nova double tests which do a DeepEquals to compare security group rules
fail because the pointer deferencing isn't done. So to make stuff work, I've
used a struct value instead and use the zeroSecurityGroupRef pattern as used
on the ec2 side. This isn't desirable and should be looked at. But if we are
prepared to go with it for now, it can be fixed in a followup branch. BTW, nothing
uses this attribute value so the change should not break juju core.R=dimitern, jameinel
CC=
https://codereview. appspot. com/7098074
Branch metadata
- Branch format:
- Branch format 7
- Repository format:
- Bazaar repository format 2a (needs bzr 1.16 or later)
- Stacked on:
- lp:~gophers/goose/trunk