268 lines
5.4 KiB
Go
268 lines
5.4 KiB
Go
// +build integration
|
|
|
|
package hcn
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
func cleanup(networkName string) {
|
|
// Delete test network (if exists)
|
|
testNetwork, err := GetNetworkByName(networkName)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if testNetwork != nil {
|
|
err := testNetwork.Delete()
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func HcnCreateTestNATNetwork() (*HostComputeNetwork, error) {
|
|
cleanup(NatTestNetworkName)
|
|
network := &HostComputeNetwork{
|
|
Type: "NAT",
|
|
Name: NatTestNetworkName,
|
|
MacPool: MacPool{
|
|
Ranges: []MacRange{
|
|
{
|
|
StartMacAddress: "00-15-5D-52-C0-00",
|
|
EndMacAddress: "00-15-5D-52-CF-FF",
|
|
},
|
|
},
|
|
},
|
|
Ipams: []Ipam{
|
|
{
|
|
Type: "Static",
|
|
Subnets: []Subnet{
|
|
{
|
|
IpAddressPrefix: "192.168.100.0/24",
|
|
Routes: []Route{
|
|
{
|
|
NextHop: "192.168.100.1",
|
|
DestinationPrefix: "0.0.0.0",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
SchemaVersion: SchemaVersion{
|
|
Major: 2,
|
|
Minor: 0,
|
|
},
|
|
}
|
|
|
|
return network.Create()
|
|
}
|
|
|
|
func CreateTestOverlayNetwork() (*HostComputeNetwork, error) {
|
|
cleanup(OverlayTestNetworkName)
|
|
network := &HostComputeNetwork{
|
|
Type: "Overlay",
|
|
Name: OverlayTestNetworkName,
|
|
MacPool: MacPool{
|
|
Ranges: []MacRange{
|
|
{
|
|
StartMacAddress: "00-15-5D-52-C0-00",
|
|
EndMacAddress: "00-15-5D-52-CF-FF",
|
|
},
|
|
},
|
|
},
|
|
Ipams: []Ipam{
|
|
{
|
|
Type: "Static",
|
|
Subnets: []Subnet{
|
|
{
|
|
IpAddressPrefix: "192.168.100.0/24",
|
|
Routes: []Route{
|
|
{
|
|
NextHop: "192.168.100.1",
|
|
DestinationPrefix: "0.0.0.0/0",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Flags: EnableNonPersistent,
|
|
SchemaVersion: SchemaVersion{
|
|
Major: 2,
|
|
Minor: 0,
|
|
},
|
|
}
|
|
|
|
vsid := &VsidPolicySetting{
|
|
IsolationId: 5000,
|
|
}
|
|
vsidJson, err := json.Marshal(vsid)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sp := &SubnetPolicy{
|
|
Type: VSID,
|
|
}
|
|
sp.Settings = vsidJson
|
|
|
|
spJson, err := json.Marshal(sp)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
network.Ipams[0].Subnets[0].Policies = append(network.Ipams[0].Subnets[0].Policies, spJson)
|
|
|
|
return network.Create()
|
|
}
|
|
|
|
func HcnCreateTestEndpoint(network *HostComputeNetwork) (*HostComputeEndpoint, error) {
|
|
if network == nil {
|
|
|
|
}
|
|
Endpoint := &HostComputeEndpoint{
|
|
Name: NatTestEndpointName,
|
|
SchemaVersion: SchemaVersion{
|
|
Major: 2,
|
|
Minor: 0,
|
|
},
|
|
}
|
|
|
|
return network.CreateEndpoint(Endpoint)
|
|
}
|
|
|
|
func HcnCreateTestEndpointWithNamespace(network *HostComputeNetwork, namespace *HostComputeNamespace) (*HostComputeEndpoint, error) {
|
|
Endpoint := &HostComputeEndpoint{
|
|
Name: NatTestEndpointName,
|
|
HostComputeNamespace: namespace.Id,
|
|
SchemaVersion: SchemaVersion{
|
|
Major: 2,
|
|
Minor: 0,
|
|
},
|
|
}
|
|
|
|
return network.CreateEndpoint(Endpoint)
|
|
}
|
|
|
|
func HcnCreateTestNamespace() (*HostComputeNamespace, error) {
|
|
namespace := &HostComputeNamespace{
|
|
Type: NamespaceTypeHostDefault,
|
|
NamespaceId: 5,
|
|
SchemaVersion: SchemaVersion{
|
|
Major: 2,
|
|
Minor: 0,
|
|
},
|
|
}
|
|
|
|
return namespace.Create()
|
|
}
|
|
|
|
func HcnCreateAcls() (*PolicyEndpointRequest, error) {
|
|
in := AclPolicySetting{
|
|
Protocols: "6",
|
|
Action: ActionTypeAllow,
|
|
Direction: DirectionTypeIn,
|
|
LocalAddresses: "192.168.100.0/24,10.0.0.21",
|
|
RemoteAddresses: "192.168.100.0/24,10.0.0.21",
|
|
LocalPorts: "80,8080",
|
|
RemotePorts: "80,8080",
|
|
RuleType: RuleTypeSwitch,
|
|
Priority: 200,
|
|
}
|
|
|
|
rawJSON, err := json.Marshal(in)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
inPolicy := EndpointPolicy{
|
|
Type: ACL,
|
|
Settings: rawJSON,
|
|
}
|
|
|
|
out := AclPolicySetting{
|
|
Protocols: "6",
|
|
Action: ActionTypeAllow,
|
|
Direction: DirectionTypeOut,
|
|
LocalAddresses: "192.168.100.0/24,10.0.0.21",
|
|
RemoteAddresses: "192.168.100.0/24,10.0.0.21",
|
|
LocalPorts: "80,8080",
|
|
RemotePorts: "80,8080",
|
|
RuleType: RuleTypeSwitch,
|
|
Priority: 200,
|
|
}
|
|
|
|
rawJSON, err = json.Marshal(out)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
outPolicy := EndpointPolicy{
|
|
Type: ACL,
|
|
Settings: rawJSON,
|
|
}
|
|
|
|
endpointRequest := PolicyEndpointRequest{
|
|
Policies: []EndpointPolicy{inPolicy, outPolicy},
|
|
}
|
|
|
|
return &endpointRequest, nil
|
|
}
|
|
|
|
func HcnCreateTestLoadBalancer(endpoint *HostComputeEndpoint) (*HostComputeLoadBalancer, error) {
|
|
loadBalancer := &HostComputeLoadBalancer{
|
|
HostComputeEndpoints: []string{endpoint.Id},
|
|
SourceVIP: "10.0.0.1",
|
|
PortMappings: []LoadBalancerPortMapping{
|
|
{
|
|
Protocol: 6, // TCP
|
|
InternalPort: 8080,
|
|
ExternalPort: 8090,
|
|
},
|
|
},
|
|
FrontendVIPs: []string{"1.1.1.2", "1.1.1.3"},
|
|
SchemaVersion: SchemaVersion{
|
|
Major: 2,
|
|
Minor: 0,
|
|
},
|
|
}
|
|
|
|
return loadBalancer.Create()
|
|
}
|
|
|
|
func HcnCreateTestRemoteSubnetRoute() (*PolicyNetworkRequest, error) {
|
|
rsr := RemoteSubnetRoutePolicySetting{
|
|
DestinationPrefix: "192.168.2.0/24",
|
|
IsolationId: 5000,
|
|
ProviderAddress: "1.1.1.1",
|
|
DistributedRouterMacAddress: "00-12-34-56-78-9a",
|
|
}
|
|
|
|
rawJSON, err := json.Marshal(rsr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
rsrPolicy := NetworkPolicy{
|
|
Type: RemoteSubnetRoute,
|
|
Settings: rawJSON,
|
|
}
|
|
|
|
networkRequest := PolicyNetworkRequest{
|
|
Policies: []NetworkPolicy{rsrPolicy},
|
|
}
|
|
|
|
return &networkRequest, nil
|
|
}
|
|
|
|
func HcnCreateTestHostRoute() (*PolicyNetworkRequest, error) {
|
|
hostRoutePolicy := NetworkPolicy{
|
|
Type: HostRoute,
|
|
Settings: []byte("{}"),
|
|
}
|
|
|
|
networkRequest := PolicyNetworkRequest{
|
|
Policies: []NetworkPolicy{hostRoutePolicy},
|
|
}
|
|
|
|
return &networkRequest, nil
|
|
}
|