github.com/civo/civogo@v0.3.65/firewall_test.go (about)

     1  package civogo
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  func TestListFirewalls(t *testing.T) {
     9  	client, server, _ := NewClientForTesting(map[string]string{
    10  		"/v2/firewalls": `[{"id": "12345", "name": "instance-123456", "rules_count": 3, "instance_count": 10, "cluster_count": 2,	"loadbalancer_count": 1}, {"id": "67789", "name": "instance-7890", "rules_count": 1, "instance_count": 2, "cluster_count": 1, "loadbalancer_count": 0}]`,
    11  	})
    12  	defer server.Close()
    13  	got, err := client.ListFirewalls()
    14  
    15  	if err != nil {
    16  		t.Errorf("Request returned an error: %s", err)
    17  		return
    18  	}
    19  	expected := []Firewall{{ID: "12345", Name: "instance-123456", RulesCount: 3, InstanceCount: 10, ClusterCount: 2, LoadBalancerCount: 1}, {ID: "67789", Name: "instance-7890", RulesCount: 1, InstanceCount: 2, ClusterCount: 1, LoadBalancerCount: 0}}
    20  	if !reflect.DeepEqual(got, expected) {
    21  		t.Errorf("Expected %+v, got %+v", expected, got)
    22  	}
    23  }
    24  
    25  func TestFindFirewall(t *testing.T) {
    26  	client, server, _ := NewClientForTesting(map[string]string{
    27  		"/v2/firewalls": `[{"id": "12345", "name": "web-instance", "rules_count": 3, "instance_count": 10, "cluster_count": 2,	"loadbalancer_count": 1, "region": "lon1"}, {"id": "67789", "name": "web-node", "rules_count": 1, "instances_count": 2, "region": "lon1"}]`,
    28  	})
    29  	defer server.Close()
    30  
    31  	got, _ := client.FindFirewall("45")
    32  	if got.ID != "12345" {
    33  		t.Errorf("Expected %s, got %s", "12345", got.ID)
    34  	}
    35  
    36  	got, _ = client.FindFirewall("89")
    37  	if got.ID != "67789" {
    38  		t.Errorf("Expected %s, got %s", "67789", got.ID)
    39  	}
    40  
    41  	got, _ = client.FindFirewall("inst")
    42  	if got.ID != "12345" {
    43  		t.Errorf("Expected %s, got %s", "12345", got.ID)
    44  	}
    45  
    46  	got, _ = client.FindFirewall("nod")
    47  	if got.ID != "67789" {
    48  		t.Errorf("Expected %s, got %s", "67789", got.ID)
    49  	}
    50  
    51  	_, err := client.FindFirewall("web")
    52  	if err.Error() != "MultipleMatchesError: unable to find web because there were multiple matches" {
    53  		t.Errorf("Expected %s, got %s", "unable to find web because there were multiple matches", err.Error())
    54  	}
    55  
    56  	_, err = client.FindFirewall("missing")
    57  	if err.Error() != "ZeroMatchesError: unable to find missing, zero matches" {
    58  		t.Errorf("Expected %s, got %s", "unable to find missing, zero matches", err.Error())
    59  	}
    60  }
    61  
    62  func TestNewFirewall(t *testing.T) {
    63  	client, server, _ := NewAdvancedClientForTesting([]ConfigAdvanceClientForTesting{
    64  		{
    65  			Method: "POST",
    66  			Value: []ValueAdvanceClientForTesting{
    67  				{
    68  					RequestBody:  `{"name":"fw-mail","region":"LON1","network_id":"1234-5698-9874-98","create_rules":true}`,
    69  					URL:          "/v2/firewalls",
    70  					ResponseBody: `{"id": "76cc107f-fbef-4e2b-b97f-f5d34f4075d3","name": "fw-mail","result": "success"}`,
    71  				},
    72  			},
    73  		},
    74  	})
    75  	defer server.Close()
    76  
    77  	CreateRules := true
    78  	firewallConfig := &FirewallConfig{
    79  		Name:        "fw-mail",
    80  		NetworkID:   "1234-5698-9874-98",
    81  		Region:      "LON1",
    82  		CreateRules: &CreateRules,
    83  	}
    84  	got, err := client.NewFirewall(firewallConfig)
    85  	if err != nil {
    86  		t.Errorf("Request returned an error: %s", err)
    87  		return
    88  	}
    89  
    90  	expected := &FirewallResult{
    91  		ID:     "76cc107f-fbef-4e2b-b97f-f5d34f4075d3",
    92  		Name:   "fw-mail",
    93  		Result: "success",
    94  	}
    95  
    96  	if expected.ID != got.ID {
    97  		t.Errorf("Expected %s, got %s", expected.ID, got.ID)
    98  	}
    99  
   100  	if expected.Name != got.Name {
   101  		t.Errorf("Expected %s, got %s", expected.Name, got.Name)
   102  	}
   103  
   104  	if expected.Result != got.Result {
   105  		t.Errorf("Expected %s, got %s", expected.Result, got.Result)
   106  	}
   107  }
   108  
   109  func TestNewFirewallWithRules(t *testing.T) {
   110  	client, server, _ := NewAdvancedClientForTesting([]ConfigAdvanceClientForTesting{
   111  		{
   112  			Method: "GET",
   113  			Value: []ValueAdvanceClientForTesting{
   114  				{
   115  					RequestBody:  ``,
   116  					URL:          "/v2/firewalls",
   117  					ResponseBody: `[{"id":"76cc107f-fbef-4e2b-b97f-f5d34f4075d3","name":"fw-mail","account_id":"eaef1dd6-1cec-4d9c-8480-96452bd94dea","rules_count": 3,"instance_count": 1,"cluster_count": 1,"loadbalancer_count": 0,"default":"false","label":"www","network_id":"ef7cf1ab-ecee-407a-b7ac-e134614647e2","rules":[{"id":"9e0745f9-3dbb-48e6-b510-4163e4b6722d","protocol":"tcp","start_port":"1","cidr":["0.0.0.0/0"],"direction":"ingress","label":"All TCP ports open","end_port":"65535","action":"allow","ports":"1-65535"}]}]`,
   118  				},
   119  			},
   120  		},
   121  	})
   122  	defer server.Close()
   123  
   124  	got, err := client.FindFirewall("76cc107f-fbef-4e2b-b97f-f5d34f4075d3")
   125  	if err != nil {
   126  		t.Errorf("Request returned an error: %s", err)
   127  		return
   128  	}
   129  
   130  	expected := Firewall{
   131  		ID:                "76cc107f-fbef-4e2b-b97f-f5d34f4075d3",
   132  		Name:              "fw-mail",
   133  		RulesCount:        3,
   134  		InstanceCount:     1,
   135  		ClusterCount:      1,
   136  		LoadBalancerCount: 0,
   137  		NetworkID:         "ef7cf1ab-ecee-407a-b7ac-e134614647e2",
   138  		Rules: []FirewallRule{
   139  			{
   140  				ID:        "9e0745f9-3dbb-48e6-b510-4163e4b6722d",
   141  				Protocol:  "tcp",
   142  				StartPort: "1",
   143  				EndPort:   "65535",
   144  				Cidr:      []string{"0.0.0.0/0"},
   145  				Direction: "ingress",
   146  				Action:    "allow",
   147  				Label:     "All TCP ports open",
   148  				Ports:     "1-65535",
   149  			},
   150  		},
   151  	}
   152  
   153  	if expected.ID != got.ID {
   154  		t.Errorf("Expected %s, got %s", expected.ID, got.ID)
   155  	}
   156  
   157  	if len(expected.Rules) != len(got.Rules) {
   158  		t.Errorf("Expected %d, got %d", len(expected.Rules), len(got.Rules))
   159  	}
   160  }
   161  
   162  func TestRenameFirewall(t *testing.T) {
   163  	client, server, _ := NewClientForTesting(map[string]string{
   164  		"/v2/firewalls/12346": `{"result": "success"}`,
   165  	})
   166  	defer server.Close()
   167  	rename := &FirewallConfig{
   168  		Name: "new_name",
   169  	}
   170  	got, err := client.RenameFirewall("12346", rename)
   171  	if err != nil {
   172  		t.Errorf("Request returned an error: %s", err)
   173  		return
   174  	}
   175  
   176  	expected := &SimpleResponse{Result: "success"}
   177  	if !reflect.DeepEqual(got, expected) {
   178  		t.Errorf("Expected %+v, got %+v", expected, got)
   179  	}
   180  }
   181  
   182  func TestDeleteFirewall(t *testing.T) {
   183  	client, server, _ := NewClientForTesting(map[string]string{
   184  		"/v2/firewalls/12346": `{"result": "success"}`,
   185  	})
   186  	defer server.Close()
   187  	got, err := client.DeleteFirewall("12346")
   188  	if err != nil {
   189  		t.Errorf("Request returned an error: %s", err)
   190  		return
   191  	}
   192  
   193  	expected := &SimpleResponse{Result: "success"}
   194  	if !reflect.DeepEqual(got, expected) {
   195  		t.Errorf("Expected %+v, got %+v", expected, got)
   196  	}
   197  }
   198  
   199  func TestNewFirewallRule(t *testing.T) {
   200  	client, server, _ := NewClientForTesting(map[string]string{
   201  		"/v2/firewalls/78901/rules": `{
   202  		  "id": "123456",
   203  		  "firewall_id": "78901",
   204  		  "openstack_security_group_rule_id": null,
   205  		  "protocol": "tcp",
   206  		  "start_port": "443",
   207  		  "end_port": "443",
   208  		  "cidr": [
   209  			"0.0.0.0/0"
   210  		  ],
   211  		  "direction": "ingress",
   212  			"action": "allow",
   213  		  "label": null
   214  		}`,
   215  	})
   216  	defer server.Close()
   217  
   218  	cfg := &FirewallRuleConfig{FirewallID: "78901", Protocol: "tcp", StartPort: "443", EndPort: "443", Cidr: []string{"0.0.0.0/0"}, Direction: "inbound", Label: "", Action: "allow"}
   219  	got, err := client.NewFirewallRule(cfg)
   220  	if err != nil {
   221  		t.Errorf("Request returned an error: %s", err)
   222  		return
   223  	}
   224  
   225  	expected := &FirewallRule{
   226  		ID:         "123456",
   227  		FirewallID: "78901",
   228  		Protocol:   "tcp",
   229  		StartPort:  "443",
   230  		EndPort:    "443",
   231  		Cidr:       []string{"0.0.0.0/0"},
   232  		Direction:  "ingress",
   233  		Action:     "allow",
   234  		Label:      "",
   235  	}
   236  
   237  	if expected.ID != got.ID {
   238  		t.Errorf("Expected %s, got %s", expected.ID, got.ID)
   239  	}
   240  
   241  	if expected.FirewallID != got.FirewallID {
   242  		t.Errorf("Expected %s, got %s", expected.FirewallID, got.FirewallID)
   243  	}
   244  
   245  	if expected.Protocol != got.Protocol {
   246  		t.Errorf("Expected %s, got %s", expected.Protocol, got.Protocol)
   247  	}
   248  
   249  	if expected.StartPort != got.StartPort {
   250  		t.Errorf("Expected %s, got %s", expected.StartPort, got.StartPort)
   251  	}
   252  
   253  	if expected.EndPort != got.EndPort {
   254  		t.Errorf("Expected %s, got %s", expected.EndPort, got.EndPort)
   255  	}
   256  
   257  	if !reflect.DeepEqual(expected.Cidr, got.Cidr) {
   258  		t.Errorf("Expected %q, got %q", expected.Cidr, got.Cidr)
   259  	}
   260  
   261  	if expected.Direction != got.Direction {
   262  		t.Errorf("Expected %s, got %s", expected.Direction, got.Direction)
   263  	}
   264  
   265  	if expected.Label != got.Label {
   266  		t.Errorf("Expected %s, got %s", expected.Label, got.Label)
   267  	}
   268  }
   269  
   270  func TestFindFirewallRule(t *testing.T) {
   271  	client, server, _ := NewClientForTesting(map[string]string{
   272  		"/v2/firewalls/22/rules": `[{
   273  			"id": "21",
   274  			"firewall_id": "22",
   275  			"openstack_security_group_rule_id": null,
   276  			"protocol": "tcp",
   277  			"start_port": "443",
   278  			"end_port": "443",
   279  			"cidr": [
   280  			  "0.0.0.0/0"
   281  			],
   282  			"direction": "ingress",
   283  			"action": "allow",
   284  			"label": "My Rule"
   285  		  },{
   286  			"id": "22",
   287  			"firewall_id": "22",
   288  			"openstack_security_group_rule_id": null,
   289  			"protocol": "tcp",
   290  			"start_port": "80",
   291  			"end_port": "80",
   292  			"cidr": [
   293  			  "0.0.0.0/0"
   294  			],
   295  			"direction": "ingress",
   296  			"action": "allow",
   297  			"label": "My Rule"
   298  		  }]`,
   299  	})
   300  	defer server.Close()
   301  
   302  	got, _ := client.FindFirewallRule("22", "21")
   303  	if got.ID != "21" {
   304  		t.Errorf("Expected %s, got %s", "1", got.ID)
   305  	}
   306  
   307  	got, _ = client.FindFirewallRule("22", "22")
   308  	if got.ID != "22" {
   309  		t.Errorf("Expected %s, got %s", "2", got.ID)
   310  	}
   311  
   312  	_, err := client.FindFirewallRule("22", "2")
   313  	if err.Error() != "MultipleMatchesError: unable to find 2 because there were multiple matches" {
   314  		t.Errorf("Expected %s, got %s", "unable to find 2 because there were multiple matches", err.Error())
   315  	}
   316  
   317  	_, err = client.FindFirewallRule("22", "missing")
   318  	if err.Error() != "ZeroMatchesError: unable to find missing, zero matches" {
   319  		t.Errorf("Expected %s, got %s", "unable to find missing, zero matches", err.Error())
   320  	}
   321  }
   322  
   323  func TestListFirewallRules(t *testing.T) {
   324  	client, server, _ := NewClientForTesting(map[string]string{
   325  		"/v2/firewalls/22/rules": `[{
   326  			"id": "1",
   327  			"firewall_id": "22",
   328  			"openstack_security_group_rule_id": null,
   329  			"protocol": "tcp",
   330  			"start_port": "443",
   331  			"end_port": "443",
   332  			"cidr": [
   333  			  "0.0.0.0/0"
   334  			],
   335  			"direction": "ingress",
   336  			"action": "allow",
   337  			"label": "My Rule"
   338  		  },{
   339  			"id": "2",
   340  			"firewall_id": "22",
   341  			"openstack_security_group_rule_id": null,
   342  			"protocol": "tcp",
   343  			"start_port": "80",
   344  			"end_port": "80",
   345  			"cidr": [
   346  			  "0.0.0.0/0"
   347  			],
   348  			"direction": "ingress",
   349  			"action": "allow",
   350  			"label": "My Rule"
   351  		  }]`,
   352  	})
   353  	defer server.Close()
   354  	got, err := client.ListFirewallRules("22")
   355  
   356  	if err != nil {
   357  		t.Errorf("Request returned an error: %s", err)
   358  		return
   359  	}
   360  	expected := []FirewallRule{{ID: "1", FirewallID: "22", Protocol: "tcp", StartPort: "443", EndPort: "443", Cidr: []string{"0.0.0.0/0"}, Direction: "ingress", Label: "My Rule", Action: "allow"}, {ID: "2", FirewallID: "22", Protocol: "tcp", StartPort: "80", EndPort: "80", Cidr: []string{"0.0.0.0/0"}, Direction: "ingress", Label: "My Rule", Action: "allow"}}
   361  	if !reflect.DeepEqual(got, expected) {
   362  		t.Errorf("Expected %+v, got %+v", expected, got)
   363  	}
   364  }
   365  
   366  func TestDeleteFirewallRule(t *testing.T) {
   367  	client, server, _ := NewClientForTesting(map[string]string{
   368  		"/v2/firewalls/12346/rules/12345": `{"result": "success"}`,
   369  	})
   370  	defer server.Close()
   371  	got, err := client.DeleteFirewallRule("12346", "12345")
   372  	if err != nil {
   373  		t.Errorf("Request returned an error: %s", err)
   374  		return
   375  	}
   376  
   377  	expected := &SimpleResponse{Result: "success"}
   378  	if !reflect.DeepEqual(got, expected) {
   379  		t.Errorf("Expected %+v, got %+v", expected, got)
   380  	}
   381  }