// TestEnsureGroup checks that when creating a duplicate security group, the existing group is // returned and the existing rules have been left as is. func (s *localServerSuite) TestEnsureGroup(c *gc.C) { env := s.Prepare(c) rule := []nova.RuleInfo{ { IPProtocol: "tcp", FromPort: 22, ToPort: 22, }, } assertRule := func(group nova.SecurityGroup) { c.Check(len(group.Rules), gc.Equals, 1) c.Check(*group.Rules[0].IPProtocol, gc.Equals, "tcp") c.Check(*group.Rules[0].FromPort, gc.Equals, 22) c.Check(*group.Rules[0].ToPort, gc.Equals, 22) } group, err := openstack.EnsureGroup(env, "test group", rule) c.Assert(err, gc.IsNil) c.Assert(group.Name, gc.Equals, "test group") assertRule(group) id := group.Id // Do it again and check that the existing group is returned. anotherRule := []nova.RuleInfo{ { IPProtocol: "tcp", FromPort: 1, ToPort: 65535, }, } group, err = openstack.EnsureGroup(env, "test group", anotherRule) c.Assert(err, gc.IsNil) c.Check(group.Id, gc.Equals, id) c.Assert(group.Name, gc.Equals, "test group") assertRule(group) }
func (t *LiveTests) TestEnsureGroupSetsGroupId(c *gc.C) { t.PrepareOnce(c) rules := []nova.RuleInfo{ { // First group explicitly asks for all services IPProtocol: "tcp", FromPort: 22, ToPort: 22, Cidr: "0.0.0.0/0", }, { // Second group should only allow access from within the group IPProtocol: "tcp", FromPort: 1, ToPort: 65535, }, } groupName := "juju-test-group-" + randomName() // Make sure things are clean before we start, and clean when we are done cleanup := func() { c.Check(openstack.DiscardSecurityGroup(t.Env, groupName), gc.IsNil) } cleanup() defer cleanup() group, err := openstack.EnsureGroup(t.Env, groupName, rules) c.Assert(err, gc.IsNil) c.Check(group.Rules, gc.HasLen, 2) c.Check(*group.Rules[0].IPProtocol, gc.Equals, "tcp") c.Check(*group.Rules[0].FromPort, gc.Equals, 22) c.Check(*group.Rules[0].ToPort, gc.Equals, 22) c.Check(group.Rules[0].IPRange["cidr"], gc.Equals, "0.0.0.0/0") c.Check(group.Rules[0].Group.Name, gc.Equals, "") c.Check(group.Rules[0].Group.TenantId, gc.Equals, "") c.Check(*group.Rules[1].IPProtocol, gc.Equals, "tcp") c.Check(*group.Rules[1].FromPort, gc.Equals, 1) c.Check(*group.Rules[1].ToPort, gc.Equals, 65535) c.Check(group.Rules[1].IPRange, gc.HasLen, 0) c.Check(group.Rules[1].Group.Name, gc.Equals, groupName) c.Check(group.Rules[1].Group.TenantId, gc.Equals, group.TenantId) }