...

Source file src/github.com/Microsoft/hcsshim/hcn/hcnnetwork_test.go

Documentation: github.com/Microsoft/hcsshim/hcn

     1  //go:build windows && integration
     2  // +build windows,integration
     3  
     4  package hcn
     5  
     6  import (
     7  	"encoding/json"
     8  	"errors"
     9  	"fmt"
    10  	"testing"
    11  )
    12  
    13  type HcnNetworkMakerFunc func() (*HostComputeNetwork, error)
    14  
    15  func TestCreateDeleteNetworks(t *testing.T) {
    16  	var netMaker HcnNetworkMakerFunc = HcnCreateTestNATNetwork
    17  	err := CreateDeleteNetworksHelper(t, netMaker)
    18  	if err != nil {
    19  		t.Fatal(err)
    20  	}
    21  	err = CreateDeleteNetworksHelper(t, func() (*HostComputeNetwork, error) { return HcnCreateTestNATNetworkWithSubnet(nil) })
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  
    26  	snet1 := CreateSubnet("192.168.100.0/24", "192.168.100.1", "1.1.1.1/0")
    27  	err = CreateDeleteNetworksHelper(t, func() (*HostComputeNetwork, error) { return HcnCreateTestNATNetworkWithSubnet(snet1) })
    28  	if err == nil {
    29  		t.Fatal(errors.New("expected failure for subnet with no default gateway provided"))
    30  	}
    31  	snet2 := CreateSubnet("192.168.100.0/24", "", "")
    32  	err = CreateDeleteNetworksHelper(t, func() (*HostComputeNetwork, error) { return HcnCreateTestNATNetworkWithSubnet(snet2) })
    33  	if err == nil {
    34  		t.Fatal(errors.New("expected failure for subnet with no nexthop provided but a gateway provided"))
    35  	}
    36  }
    37  
    38  func CreateDeleteNetworksHelper(t *testing.T, networkFunction HcnNetworkMakerFunc) error {
    39  	t.Helper()
    40  	network, err := networkFunction()
    41  	if err != nil {
    42  		return err
    43  	}
    44  	jsonString, err := json.Marshal(network)
    45  	if err != nil {
    46  		t.Fatal(err)
    47  	}
    48  	fmt.Printf("Network JSON:\n%s \n", jsonString)
    49  	err = network.Delete()
    50  	if err != nil {
    51  		return err
    52  	}
    53  	return nil
    54  }
    55  
    56  func TestGetNetworkByName(t *testing.T) {
    57  	network, err := HcnCreateTestNATNetwork()
    58  	if err != nil {
    59  		t.Fatal(err)
    60  	}
    61  	network, err = GetNetworkByName(network.Name)
    62  	if err != nil {
    63  		t.Fatal(err)
    64  	}
    65  	if network == nil {
    66  		t.Fatal("No Network found")
    67  	}
    68  	err = network.Delete()
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  }
    73  
    74  func TestGetNetworkById(t *testing.T) {
    75  	network, err := HcnCreateTestNATNetwork()
    76  	if err != nil {
    77  		t.Fatal(err)
    78  	}
    79  	network, err = GetNetworkByID(network.Id)
    80  	if err != nil {
    81  		t.Fatal(err)
    82  	}
    83  	if network == nil {
    84  		t.Fatal("No Network found")
    85  	}
    86  	err = network.Delete()
    87  	if err != nil {
    88  		t.Fatal(err)
    89  	}
    90  }
    91  
    92  func TestListNetwork(t *testing.T) {
    93  	_, err := ListNetworks()
    94  	if err != nil {
    95  		t.Fatal(err)
    96  	}
    97  }
    98  
    99  func testNetworkPolicy(t *testing.T, policiesToTest *PolicyNetworkRequest) {
   100  	t.Helper()
   101  	network, err := CreateTestOverlayNetwork()
   102  	if err != nil {
   103  		t.Fatal(err)
   104  	}
   105  
   106  	_ = network.AddPolicy(*policiesToTest)
   107  
   108  	//Reload the network object from HNS.
   109  	network, err = GetNetworkByID(network.Id)
   110  	if err != nil {
   111  		t.Fatal(err)
   112  	}
   113  
   114  	for _, policyToTest := range policiesToTest.Policies {
   115  		foundPolicy := false
   116  		for _, policy := range network.Policies {
   117  			if policy.Type == policyToTest.Type {
   118  				foundPolicy = true
   119  				break
   120  			}
   121  		}
   122  		if !foundPolicy {
   123  			t.Fatalf("Could not find %s policy on network.", policyToTest.Type)
   124  		}
   125  	}
   126  
   127  	_ = network.RemovePolicy(*policiesToTest)
   128  
   129  	//Reload the network object from HNS.
   130  	network, err = GetNetworkByID(network.Id)
   131  	if err != nil {
   132  		t.Fatal(err)
   133  	}
   134  
   135  	for _, policyToTest := range policiesToTest.Policies {
   136  		foundPolicy := false
   137  		for _, policy := range network.Policies {
   138  			if policy.Type == policyToTest.Type {
   139  				foundPolicy = true
   140  				break
   141  			}
   142  		}
   143  		if foundPolicy {
   144  			t.Fatalf("Found %s policy on network when it should have been deleted.", policyToTest.Type)
   145  		}
   146  	}
   147  
   148  	err = network.Delete()
   149  	if err != nil {
   150  		t.Fatal(err)
   151  	}
   152  }
   153  
   154  func TestAddRemoveRemoteSubnetRoutePolicy(t *testing.T) {
   155  	remoteSubnetRoutePolicy, err := HcnCreateTestRemoteSubnetRoute()
   156  	if err != nil {
   157  		t.Fatal(err)
   158  	}
   159  
   160  	testNetworkPolicy(t, remoteSubnetRoutePolicy)
   161  }
   162  
   163  func TestAddRemoveHostRoutePolicy(t *testing.T) {
   164  	hostRoutePolicy, err := HcnCreateTestHostRoute()
   165  	if err != nil {
   166  		t.Fatal(err)
   167  	}
   168  
   169  	testNetworkPolicy(t, hostRoutePolicy)
   170  }
   171  
   172  func TestAddRemoveNetworACLPolicy(t *testing.T) {
   173  	networkACLPolicy, err := HcnCreateNetworkACLs()
   174  	if err != nil {
   175  		t.Fatal(err)
   176  	}
   177  
   178  	testNetworkPolicy(t, networkACLPolicy)
   179  }
   180  
   181  func TestNetworkFlags(t *testing.T) {
   182  	network, err := CreateTestOverlayNetwork()
   183  	if err != nil {
   184  		t.Fatal(err)
   185  	}
   186  
   187  	//Reload the network object from HNS.
   188  	network, err = GetNetworkByID(network.Id)
   189  	if err != nil {
   190  		t.Fatal(err)
   191  	}
   192  
   193  	if network.Flags != EnableNonPersistent {
   194  		t.Errorf("EnableNonPersistent flag (%d) is not set on network", EnableNonPersistent)
   195  	}
   196  
   197  	err = network.Delete()
   198  	if err != nil {
   199  		t.Fatal(err)
   200  	}
   201  }
   202  

View as plain text