func TestPropertyUpdate(t *testing.T) { client := contrail.NewClient("localhost", 8082) net := types.VirtualNetwork{} net.SetName("test") err := client.Create(&net) if err != nil { t.Error(err) } defer client.Delete(&net) props := net.GetVirtualNetworkProperties() if len(props.ForwardingMode) > 0 { t.Error(props.ForwardingMode) } props.ForwardingMode = "l2_l3" net.SetVirtualNetworkProperties(&props) err = client.Update(&net) if err != nil { t.Error(err) } obj, err := client.FindByUuid("virtual-network", net.GetUuid()) if err != nil { t.Fatal(err) } netPtr := obj.(*types.VirtualNetwork) p2 := netPtr.GetVirtualNetworkProperties() if p2.ForwardingMode != "l2_l3" { t.Errorf("Expected: l2_l3 got: %s", p2.ForwardingMode) } }
func CreateNetworkWithSubnet( client contrail.ApiClient, project_id, name, prefix string) ( string, error) { expr := regexp.MustCompile(`(([0-9]{1,3}\.){3}[0-9]{1,3})/([0-9]{1,2})`) match := expr.FindStringSubmatch(prefix) if match == nil { return "", fmt.Errorf("Invalid subnet prefix %s", prefix) } address := match[1] prefixlen, _ := strconv.Atoi(match[3]) obj, err := client.FindByUuid("project", project_id) if err != nil { return "", err } project := obj.(*types.Project) refList, err := project.GetNetworkIpams() if err != nil { return "", err } var ipam *types.NetworkIpam if len(refList) > 0 { obj, err := client.FindByUuid("network-ipam", refList[0].Uuid) if err != nil { return "", err } ipam = obj.(*types.NetworkIpam) } else { obj, err := client.FindByName("network-ipam", "default-domain:default-project:default-network-ipam") if err != nil { return "", err } ipam = obj.(*types.NetworkIpam) } net := new(types.VirtualNetwork) net.SetParent(project) net.SetName(name) subnets := types.VnSubnetsType{} subnets.AddIpamSubnets( &types.IpamSubnetType{ Subnet: &types.SubnetType{address, prefixlen}}) net.AddNetworkIpam(ipam, subnets) err = client.Create(net) if err != nil { return "", err } return net.GetUuid(), nil }
func TestCreate(t *testing.T) { client := contrail.NewClient("localhost", 8082) net := types.VirtualNetwork{} net.SetName("test") ipam, err := client.FindByName("network-ipam", "default-domain:default-project:default-network-ipam") if err != nil { t.Fatal(err) } subnets := types.VnSubnetsType{} subnets.AddIpamSubnets( &types.IpamSubnetType{ Subnet: &types.SubnetType{"10.0.0.0", 8}}) net.AddNetworkIpam(ipam.(*types.NetworkIpam), subnets) err = client.Create(&net) if err != nil { t.Error(err) } if len(net.GetUuid()) == 0 { t.Error("No uuid assigned") } netPtr, err := client.FindByUuid("virtual-network", net.GetUuid()) if err != nil { t.Error(err) } else { xnet := netPtr.(*types.VirtualNetwork) refs, err := xnet.GetNetworkIpamRefs() if err != nil { t.Error(err) } else if len(refs) > 0 { xattr := refs[0].Attr.(types.VnSubnetsType) if len(xattr.IpamSubnets) == 1 { isubnet := xattr.IpamSubnets[0] if isubnet.Subnet.IpPrefix != "10.0.0.0" || isubnet.Subnet.IpPrefixLen != 8 { t.Errorf("Bad subnet %s/%d", isubnet.Subnet.IpPrefix, isubnet.Subnet.IpPrefixLen) } } else { t.Errorf("%d subnets", len(xattr.IpamSubnets)) } } else { t.Error("Empty network-ipam reference list") } } err = client.Delete(&net) if err != nil { t.Error(err) } }
func CreateNetwork(client contrail.ApiClient, project_id, name string) ( string, error) { obj, err := client.FindByUuid("project", project_id) if err != nil { return "", err } project := obj.(*types.Project) net := new(types.VirtualNetwork) net.SetParent(project) net.SetName(name) err = client.Create(net) if err != nil { return "", err } return net.GetUuid(), nil }
func TestReferenceUpdate(t *testing.T) { client := contrail.NewClient("localhost", 8082) net := types.VirtualNetwork{} net.SetName("test2") ipam, err := client.FindByName("network-ipam", "default-domain:default-project:default-network-ipam") if err != nil { t.Fatal(err) } subnets := types.VnSubnetsType{} subnets.AddIpamSubnets( &types.IpamSubnetType{ Subnet: &types.SubnetType{"10.0.0.0", 8}}) net.AddNetworkIpam(ipam.(*types.NetworkIpam), subnets) err = client.Create(&net) if err != nil { t.Error(err) } defer client.Delete(&net) obj, err := client.FindByUuid("virtual-network", net.GetUuid()) if err != nil { t.Fatal(err) } netPtr := obj.(*types.VirtualNetwork) refs, err := netPtr.GetNetworkIpamRefs() if err != nil { t.Error(err) } else if len(refs) > 0 { netPtr.DeleteNetworkIpam(refs[0].Uuid) nsubnets := types.VnSubnetsType{} nsubnets.AddIpamSubnets( &types.IpamSubnetType{ Subnet: &types.SubnetType{"192.168.0.0", 16}}) netPtr.AddNetworkIpam(ipam.(*types.NetworkIpam), nsubnets) client.Update(netPtr) } else { t.Error("Empty network-ipam reference list") } obj, err = client.FindByUuid("virtual-network", net.GetUuid()) if err != nil { t.Fatal(err) } netPtr = obj.(*types.VirtualNetwork) refs, err = netPtr.GetNetworkIpamRefs() if err != nil { t.Error(err) } else if len(refs) != 1 { t.Errorf("Expected: 1 reference, %d actual", len(refs)) } else { xattr := refs[0].Attr.(types.VnSubnetsType) if len(xattr.IpamSubnets) == 1 { isubnet := xattr.IpamSubnets[0] if isubnet.Subnet.IpPrefix != "192.168.0.0" || isubnet.Subnet.IpPrefixLen != 16 { t.Errorf("Bad subnet %s/%d", isubnet.Subnet.IpPrefix, isubnet.Subnet.IpPrefixLen) } } else { t.Errorf("%d subnets", len(xattr.IpamSubnets)) } } netPtr.ClearNetworkIpam() client.Update(netPtr) obj, err = client.FindByUuid("virtual-network", net.GetUuid()) if err != nil { t.Fatal(err) } netPtr = obj.(*types.VirtualNetwork) refs, err = netPtr.GetNetworkIpamRefs() if err != nil { t.Error(err) } else if len(refs) != 0 { t.Errorf("Expected: 1 reference, %d actual", len(refs)) } }