github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/compute/v2/extensions/secgroups/testing/fixtures.go (about)

     1  package testing
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"testing"
     7  
     8  	th "github.com/huaweicloud/golangsdk/testhelper"
     9  	fake "github.com/huaweicloud/golangsdk/testhelper/client"
    10  )
    11  
    12  const rootPath = "/os-security-groups"
    13  
    14  const listGroupsJSON = `
    15  {
    16    "security_groups": [
    17      {
    18        "description": "default",
    19        "id": "{groupID}",
    20        "name": "default",
    21        "rules": [],
    22        "tenant_id": "openstack"
    23      }
    24    ]
    25  }
    26  `
    27  
    28  func mockListGroupsResponse(t *testing.T) {
    29  	th.Mux.HandleFunc(rootPath, func(w http.ResponseWriter, r *http.Request) {
    30  		th.TestMethod(t, r, "GET")
    31  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    32  
    33  		w.Header().Add("Content-Type", "application/json")
    34  		w.WriteHeader(http.StatusOK)
    35  
    36  		fmt.Fprintf(w, listGroupsJSON)
    37  	})
    38  }
    39  
    40  func mockListGroupsByServerResponse(t *testing.T, serverID string) {
    41  	url := fmt.Sprintf("/servers/%s%s", serverID, rootPath)
    42  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
    43  		th.TestMethod(t, r, "GET")
    44  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    45  
    46  		w.Header().Add("Content-Type", "application/json")
    47  		w.WriteHeader(http.StatusOK)
    48  
    49  		fmt.Fprintf(w, listGroupsJSON)
    50  	})
    51  }
    52  
    53  func mockCreateGroupResponse(t *testing.T) {
    54  	th.Mux.HandleFunc(rootPath, func(w http.ResponseWriter, r *http.Request) {
    55  		th.TestMethod(t, r, "POST")
    56  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    57  
    58  		th.TestJSONRequest(t, r, `
    59  {
    60    "security_group": {
    61      "name": "test",
    62      "description": "something"
    63    }
    64  }
    65  	`)
    66  
    67  		w.Header().Add("Content-Type", "application/json")
    68  		w.WriteHeader(http.StatusOK)
    69  
    70  		fmt.Fprintf(w, `
    71  {
    72    "security_group": {
    73      "description": "something",
    74      "id": "{groupID}",
    75      "name": "test",
    76      "rules": [],
    77      "tenant_id": "openstack"
    78    }
    79  }
    80  `)
    81  	})
    82  }
    83  
    84  func mockUpdateGroupResponse(t *testing.T, groupID string) {
    85  	url := fmt.Sprintf("%s/%s", rootPath, groupID)
    86  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
    87  		th.TestMethod(t, r, "PUT")
    88  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    89  
    90  		th.TestJSONRequest(t, r, `
    91  {
    92    "security_group": {
    93      "name": "new_name",
    94  		"description": "new_desc"
    95    }
    96  }
    97  	`)
    98  
    99  		w.Header().Add("Content-Type", "application/json")
   100  		w.WriteHeader(http.StatusOK)
   101  
   102  		fmt.Fprintf(w, `
   103  {
   104    "security_group": {
   105      "description": "something",
   106      "id": "{groupID}",
   107      "name": "new_name",
   108      "rules": [],
   109      "tenant_id": "openstack"
   110    }
   111  }
   112  `)
   113  	})
   114  }
   115  
   116  func mockGetGroupsResponse(t *testing.T, groupID string) {
   117  	url := fmt.Sprintf("%s/%s", rootPath, groupID)
   118  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
   119  		th.TestMethod(t, r, "GET")
   120  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   121  
   122  		w.Header().Add("Content-Type", "application/json")
   123  		w.WriteHeader(http.StatusOK)
   124  
   125  		fmt.Fprintf(w, `
   126  {
   127    "security_group": {
   128      "description": "default",
   129      "id": "{groupID}",
   130      "name": "default",
   131      "rules": [
   132        {
   133          "from_port": 80,
   134          "group": {
   135            "tenant_id": "openstack",
   136            "name": "default"
   137          },
   138          "ip_protocol": "TCP",
   139          "to_port": 85,
   140          "parent_group_id": "{groupID}",
   141          "ip_range": {
   142  						"cidr": "0.0.0.0"
   143  				},
   144          "id": "{ruleID}"
   145        }
   146      ],
   147      "tenant_id": "openstack"
   148    }
   149  }
   150  			`)
   151  	})
   152  }
   153  
   154  func mockGetNumericIDGroupResponse(t *testing.T, groupID int) {
   155  	url := fmt.Sprintf("%s/%d", rootPath, groupID)
   156  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
   157  		th.TestMethod(t, r, "GET")
   158  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   159  
   160  		w.Header().Add("Content-Type", "application/json")
   161  		w.WriteHeader(http.StatusOK)
   162  
   163  		fmt.Fprintf(w, `
   164  {
   165  	"security_group": {
   166  		"id": %d
   167  	}
   168  }
   169  		`, groupID)
   170  	})
   171  }
   172  
   173  func mockGetNumericIDGroupRuleResponse(t *testing.T, groupID int) {
   174  	url := fmt.Sprintf("%s/%d", rootPath, groupID)
   175  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
   176  		th.TestMethod(t, r, "GET")
   177  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   178  
   179  		w.Header().Add("Content-Type", "application/json")
   180  		w.WriteHeader(http.StatusOK)
   181  
   182  		fmt.Fprintf(w, `
   183  {
   184    "security_group": {
   185      "id": %d,
   186      "rules": [
   187        {
   188          "parent_group_id": %d,
   189          "id": %d
   190        }
   191      ]
   192    }
   193  }
   194  		`, groupID, groupID, groupID)
   195  	})
   196  }
   197  
   198  func mockDeleteGroupResponse(t *testing.T, groupID string) {
   199  	url := fmt.Sprintf("%s/%s", rootPath, groupID)
   200  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
   201  		th.TestMethod(t, r, "DELETE")
   202  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   203  		w.Header().Add("Content-Type", "application/json")
   204  		w.WriteHeader(http.StatusAccepted)
   205  	})
   206  }
   207  
   208  func mockAddRuleResponse(t *testing.T) {
   209  	th.Mux.HandleFunc("/os-security-group-rules", func(w http.ResponseWriter, r *http.Request) {
   210  		th.TestMethod(t, r, "POST")
   211  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   212  
   213  		th.TestJSONRequest(t, r, `
   214  {
   215    "security_group_rule": {
   216      "from_port": 22,
   217      "ip_protocol": "TCP",
   218      "to_port": 22,
   219      "parent_group_id": "{groupID}",
   220      "cidr": "0.0.0.0/0"
   221    }
   222  }	`)
   223  
   224  		w.Header().Add("Content-Type", "application/json")
   225  		w.WriteHeader(http.StatusOK)
   226  
   227  		fmt.Fprintf(w, `
   228  {
   229    "security_group_rule": {
   230      "from_port": 22,
   231      "group": {},
   232      "ip_protocol": "TCP",
   233      "to_port": 22,
   234      "parent_group_id": "{groupID}",
   235      "ip_range": {
   236        "cidr": "0.0.0.0/0"
   237      },
   238      "id": "{ruleID}"
   239    }
   240  }`)
   241  	})
   242  }
   243  
   244  func mockAddRuleResponseICMPZero(t *testing.T) {
   245  	th.Mux.HandleFunc("/os-security-group-rules", func(w http.ResponseWriter, r *http.Request) {
   246  		th.TestMethod(t, r, "POST")
   247  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   248  
   249  		th.TestJSONRequest(t, r, `
   250  {
   251    "security_group_rule": {
   252      "from_port": 0,
   253      "ip_protocol": "ICMP",
   254      "to_port": 0,
   255      "parent_group_id": "{groupID}",
   256      "cidr": "0.0.0.0/0"
   257    }
   258  }	`)
   259  
   260  		w.Header().Add("Content-Type", "application/json")
   261  		w.WriteHeader(http.StatusOK)
   262  
   263  		fmt.Fprintf(w, `
   264  {
   265    "security_group_rule": {
   266      "from_port": 0,
   267      "group": {},
   268      "ip_protocol": "ICMP",
   269      "to_port": 0,
   270      "parent_group_id": "{groupID}",
   271      "ip_range": {
   272        "cidr": "0.0.0.0/0"
   273      },
   274      "id": "{ruleID}"
   275    }
   276  }`)
   277  	})
   278  }
   279  
   280  func mockDeleteRuleResponse(t *testing.T, ruleID string) {
   281  	url := fmt.Sprintf("/os-security-group-rules/%s", ruleID)
   282  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
   283  		th.TestMethod(t, r, "DELETE")
   284  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   285  		w.Header().Add("Content-Type", "application/json")
   286  		w.WriteHeader(http.StatusAccepted)
   287  	})
   288  }
   289  
   290  func mockAddServerToGroupResponse(t *testing.T, serverID string) {
   291  	url := fmt.Sprintf("/servers/%s/action", serverID)
   292  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
   293  		th.TestMethod(t, r, "POST")
   294  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   295  
   296  		th.TestJSONRequest(t, r, `
   297  {
   298    "addSecurityGroup": {
   299      "name": "test"
   300    }
   301  }
   302  	`)
   303  
   304  		w.Header().Add("Content-Type", "application/json")
   305  		w.WriteHeader(http.StatusAccepted)
   306  	})
   307  }
   308  
   309  func mockRemoveServerFromGroupResponse(t *testing.T, serverID string) {
   310  	url := fmt.Sprintf("/servers/%s/action", serverID)
   311  	th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
   312  		th.TestMethod(t, r, "POST")
   313  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   314  
   315  		th.TestJSONRequest(t, r, `
   316  {
   317    "removeSecurityGroup": {
   318      "name": "test"
   319    }
   320  }
   321  	`)
   322  
   323  		w.Header().Add("Content-Type", "application/json")
   324  		w.WriteHeader(http.StatusAccepted)
   325  	})
   326  }