github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/compute/v2/secgroups/testing/requests_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/compute/v2/secgroups"
     8  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
     9  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    10  	"github.com/vnpaycloud-console/gophercloud/v2/testhelper/client"
    11  )
    12  
    13  const (
    14  	serverID = "{serverID}"
    15  	groupID  = "{groupID}"
    16  	ruleID   = "{ruleID}"
    17  )
    18  
    19  func TestList(t *testing.T) {
    20  	th.SetupHTTP()
    21  	defer th.TeardownHTTP()
    22  
    23  	mockListGroupsResponse(t)
    24  
    25  	count := 0
    26  
    27  	err := secgroups.List(client.ServiceClient()).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    28  		count++
    29  		actual, err := secgroups.ExtractSecurityGroups(page)
    30  		if err != nil {
    31  			t.Errorf("Failed to extract users: %v", err)
    32  			return false, err
    33  		}
    34  
    35  		expected := []secgroups.SecurityGroup{
    36  			{
    37  				ID:          groupID,
    38  				Description: "default",
    39  				Name:        "default",
    40  				Rules:       []secgroups.Rule{},
    41  				TenantID:    "openstack",
    42  			},
    43  		}
    44  
    45  		th.CheckDeepEquals(t, expected, actual)
    46  
    47  		return true, nil
    48  	})
    49  
    50  	th.AssertNoErr(t, err)
    51  	th.AssertEquals(t, 1, count)
    52  }
    53  
    54  func TestListByServer(t *testing.T) {
    55  	th.SetupHTTP()
    56  	defer th.TeardownHTTP()
    57  
    58  	mockListGroupsByServerResponse(t, serverID)
    59  
    60  	count := 0
    61  
    62  	err := secgroups.ListByServer(client.ServiceClient(), serverID).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    63  		count++
    64  		actual, err := secgroups.ExtractSecurityGroups(page)
    65  		if err != nil {
    66  			t.Errorf("Failed to extract users: %v", err)
    67  			return false, err
    68  		}
    69  
    70  		expected := []secgroups.SecurityGroup{
    71  			{
    72  				ID:          groupID,
    73  				Description: "default",
    74  				Name:        "default",
    75  				Rules:       []secgroups.Rule{},
    76  				TenantID:    "openstack",
    77  			},
    78  		}
    79  
    80  		th.CheckDeepEquals(t, expected, actual)
    81  
    82  		return true, nil
    83  	})
    84  
    85  	th.AssertNoErr(t, err)
    86  	th.AssertEquals(t, 1, count)
    87  }
    88  
    89  func TestCreate(t *testing.T) {
    90  	th.SetupHTTP()
    91  	defer th.TeardownHTTP()
    92  
    93  	mockCreateGroupResponse(t)
    94  
    95  	opts := secgroups.CreateOpts{
    96  		Name:        "test",
    97  		Description: "something",
    98  	}
    99  
   100  	group, err := secgroups.Create(context.TODO(), client.ServiceClient(), opts).Extract()
   101  	th.AssertNoErr(t, err)
   102  
   103  	expected := &secgroups.SecurityGroup{
   104  		ID:          groupID,
   105  		Name:        "test",
   106  		Description: "something",
   107  		TenantID:    "openstack",
   108  		Rules:       []secgroups.Rule{},
   109  	}
   110  	th.AssertDeepEquals(t, expected, group)
   111  }
   112  
   113  func TestUpdate(t *testing.T) {
   114  	th.SetupHTTP()
   115  	defer th.TeardownHTTP()
   116  
   117  	mockUpdateGroupResponse(t, groupID)
   118  
   119  	description := "new_desc"
   120  	opts := secgroups.UpdateOpts{
   121  		Name:        "new_name",
   122  		Description: &description,
   123  	}
   124  
   125  	group, err := secgroups.Update(context.TODO(), client.ServiceClient(), groupID, opts).Extract()
   126  	th.AssertNoErr(t, err)
   127  
   128  	expected := &secgroups.SecurityGroup{
   129  		ID:          groupID,
   130  		Name:        "new_name",
   131  		Description: "something",
   132  		TenantID:    "openstack",
   133  		Rules:       []secgroups.Rule{},
   134  	}
   135  	th.AssertDeepEquals(t, expected, group)
   136  }
   137  
   138  func TestGet(t *testing.T) {
   139  	th.SetupHTTP()
   140  	defer th.TeardownHTTP()
   141  
   142  	mockGetGroupsResponse(t, groupID)
   143  
   144  	group, err := secgroups.Get(context.TODO(), client.ServiceClient(), groupID).Extract()
   145  	th.AssertNoErr(t, err)
   146  
   147  	expected := &secgroups.SecurityGroup{
   148  		ID:          groupID,
   149  		Description: "default",
   150  		Name:        "default",
   151  		TenantID:    "openstack",
   152  		Rules: []secgroups.Rule{
   153  			{
   154  				FromPort:      80,
   155  				ToPort:        85,
   156  				IPProtocol:    "TCP",
   157  				IPRange:       secgroups.IPRange{CIDR: "0.0.0.0"},
   158  				Group:         secgroups.Group{TenantID: "openstack", Name: "default"},
   159  				ParentGroupID: groupID,
   160  				ID:            ruleID,
   161  			},
   162  		},
   163  	}
   164  
   165  	th.AssertDeepEquals(t, expected, group)
   166  }
   167  
   168  func TestGetNumericID(t *testing.T) {
   169  	th.SetupHTTP()
   170  	defer th.TeardownHTTP()
   171  
   172  	numericGroupID := 12345
   173  
   174  	mockGetNumericIDGroupResponse(t, numericGroupID)
   175  
   176  	group, err := secgroups.Get(context.TODO(), client.ServiceClient(), "12345").Extract()
   177  	th.AssertNoErr(t, err)
   178  
   179  	expected := &secgroups.SecurityGroup{ID: "12345"}
   180  	th.AssertDeepEquals(t, expected, group)
   181  }
   182  
   183  func TestGetNumericRuleID(t *testing.T) {
   184  	th.SetupHTTP()
   185  	defer th.TeardownHTTP()
   186  
   187  	numericGroupID := 12345
   188  
   189  	mockGetNumericIDGroupRuleResponse(t, numericGroupID)
   190  
   191  	group, err := secgroups.Get(context.TODO(), client.ServiceClient(), "12345").Extract()
   192  	th.AssertNoErr(t, err)
   193  
   194  	expected := &secgroups.SecurityGroup{
   195  		ID: "12345",
   196  		Rules: []secgroups.Rule{
   197  			{
   198  				ParentGroupID: "12345",
   199  				ID:            "12345",
   200  			},
   201  		},
   202  	}
   203  	th.AssertDeepEquals(t, expected, group)
   204  }
   205  
   206  func TestDelete(t *testing.T) {
   207  	th.SetupHTTP()
   208  	defer th.TeardownHTTP()
   209  
   210  	mockDeleteGroupResponse(t, groupID)
   211  
   212  	err := secgroups.Delete(context.TODO(), client.ServiceClient(), groupID).ExtractErr()
   213  	th.AssertNoErr(t, err)
   214  }
   215  
   216  func TestAddRule(t *testing.T) {
   217  	th.SetupHTTP()
   218  	defer th.TeardownHTTP()
   219  
   220  	mockAddRuleResponse(t)
   221  
   222  	opts := secgroups.CreateRuleOpts{
   223  		ParentGroupID: groupID,
   224  		FromPort:      22,
   225  		ToPort:        22,
   226  		IPProtocol:    "TCP",
   227  		CIDR:          "0.0.0.0/0",
   228  	}
   229  
   230  	rule, err := secgroups.CreateRule(context.TODO(), client.ServiceClient(), opts).Extract()
   231  	th.AssertNoErr(t, err)
   232  
   233  	expected := &secgroups.Rule{
   234  		FromPort:      22,
   235  		ToPort:        22,
   236  		Group:         secgroups.Group{},
   237  		IPProtocol:    "TCP",
   238  		ParentGroupID: groupID,
   239  		IPRange:       secgroups.IPRange{CIDR: "0.0.0.0/0"},
   240  		ID:            ruleID,
   241  	}
   242  
   243  	th.AssertDeepEquals(t, expected, rule)
   244  }
   245  
   246  func TestAddRuleICMPZero(t *testing.T) {
   247  	th.SetupHTTP()
   248  	defer th.TeardownHTTP()
   249  
   250  	mockAddRuleResponseICMPZero(t)
   251  
   252  	opts := secgroups.CreateRuleOpts{
   253  		ParentGroupID: groupID,
   254  		FromPort:      0,
   255  		ToPort:        0,
   256  		IPProtocol:    "ICMP",
   257  		CIDR:          "0.0.0.0/0",
   258  	}
   259  
   260  	rule, err := secgroups.CreateRule(context.TODO(), client.ServiceClient(), opts).Extract()
   261  	th.AssertNoErr(t, err)
   262  
   263  	expected := &secgroups.Rule{
   264  		FromPort:      0,
   265  		ToPort:        0,
   266  		Group:         secgroups.Group{},
   267  		IPProtocol:    "ICMP",
   268  		ParentGroupID: groupID,
   269  		IPRange:       secgroups.IPRange{CIDR: "0.0.0.0/0"},
   270  		ID:            ruleID,
   271  	}
   272  
   273  	th.AssertDeepEquals(t, expected, rule)
   274  }
   275  
   276  func TestDeleteRule(t *testing.T) {
   277  	th.SetupHTTP()
   278  	defer th.TeardownHTTP()
   279  
   280  	mockDeleteRuleResponse(t, ruleID)
   281  
   282  	err := secgroups.DeleteRule(context.TODO(), client.ServiceClient(), ruleID).ExtractErr()
   283  	th.AssertNoErr(t, err)
   284  }
   285  
   286  func TestAddServer(t *testing.T) {
   287  	th.SetupHTTP()
   288  	defer th.TeardownHTTP()
   289  
   290  	mockAddServerToGroupResponse(t, serverID)
   291  
   292  	err := secgroups.AddServer(context.TODO(), client.ServiceClient(), serverID, "test").ExtractErr()
   293  	th.AssertNoErr(t, err)
   294  }
   295  
   296  func TestRemoveServer(t *testing.T) {
   297  	th.SetupHTTP()
   298  	defer th.TeardownHTTP()
   299  
   300  	mockRemoveServerFromGroupResponse(t, serverID)
   301  
   302  	err := secgroups.RemoveServer(context.TODO(), client.ServiceClient(), serverID, "test").ExtractErr()
   303  	th.AssertNoErr(t, err)
   304  }