github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/sharedfilesystems/v2/shares/testing/request_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/sharedfilesystems/v2/shares"
     9  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    10  	"github.com/vnpaycloud-console/gophercloud/v2/testhelper/client"
    11  )
    12  
    13  func TestCreate(t *testing.T) {
    14  	th.SetupHTTP()
    15  	defer th.TeardownHTTP()
    16  
    17  	MockCreateResponse(t)
    18  
    19  	options := &shares.CreateOpts{
    20  		Size:       1,
    21  		Name:       "my_test_share",
    22  		ShareProto: "NFS",
    23  		SchedulerHints: &shares.SchedulerHints{
    24  			SameHost:      "e268f4aa-d571-43dd-9ab3-f49ad06ffaef",
    25  			DifferentHost: "e268f4aa-d571-43dd-9ab3-f49ad06ffaef",
    26  		},
    27  	}
    28  	n, err := shares.Create(context.TODO(), client.ServiceClient(), options).Extract()
    29  
    30  	th.AssertNoErr(t, err)
    31  	th.AssertEquals(t, n.Name, "my_test_share")
    32  	th.AssertEquals(t, n.Size, 1)
    33  	th.AssertEquals(t, n.ShareProto, "NFS")
    34  	th.AssertEquals(t, n.Metadata["__affinity_same_host"], "e268f4aa-d571-43dd-9ab3-f49ad06ffaef")
    35  	th.AssertEquals(t, n.Metadata["__affinity_different_host"], "e268f4aa-d571-43dd-9ab3-f49ad06ffaef")
    36  }
    37  
    38  func TestUpdate(t *testing.T) {
    39  	th.SetupHTTP()
    40  	defer th.TeardownHTTP()
    41  
    42  	MockUpdateResponse(t)
    43  
    44  	name := "my_new_test_share"
    45  	description := ""
    46  	iFalse := false
    47  	options := &shares.UpdateOpts{
    48  		DisplayName:        &name,
    49  		DisplayDescription: &description,
    50  		IsPublic:           &iFalse,
    51  	}
    52  	n, err := shares.Update(context.TODO(), client.ServiceClient(), shareID, options).Extract()
    53  
    54  	th.AssertNoErr(t, err)
    55  	th.AssertEquals(t, n.Name, "my_new_test_share")
    56  	th.AssertEquals(t, n.Description, "")
    57  	th.AssertEquals(t, n.IsPublic, false)
    58  }
    59  
    60  func TestDelete(t *testing.T) {
    61  	th.SetupHTTP()
    62  	defer th.TeardownHTTP()
    63  
    64  	MockDeleteResponse(t)
    65  
    66  	result := shares.Delete(context.TODO(), client.ServiceClient(), shareID)
    67  	th.AssertNoErr(t, result.Err)
    68  }
    69  
    70  func TestGet(t *testing.T) {
    71  	th.SetupHTTP()
    72  	defer th.TeardownHTTP()
    73  
    74  	MockGetResponse(t)
    75  
    76  	s, err := shares.Get(context.TODO(), client.ServiceClient(), shareID).Extract()
    77  	th.AssertNoErr(t, err)
    78  	th.AssertDeepEquals(t, s, &shares.Share{
    79  		AvailabilityZone:   "nova",
    80  		ShareNetworkID:     "713df749-aac0-4a54-af52-10f6c991e80c",
    81  		ShareServerID:      "e268f4aa-d571-43dd-9ab3-f49ad06ffaef",
    82  		SnapshotID:         "",
    83  		ID:                 shareID,
    84  		Size:               1,
    85  		ShareType:          "25747776-08e5-494f-ab40-a64b9d20d8f7",
    86  		ShareTypeName:      "default",
    87  		ConsistencyGroupID: "9397c191-8427-4661-a2e8-b23820dc01d4",
    88  		ProjectID:          "16e1ab15c35a457e9c2b2aa189f544e1",
    89  		Metadata: map[string]string{
    90  			"project": "my_app",
    91  			"aim":     "doc",
    92  		},
    93  		Status:                         "available",
    94  		Description:                    "My custom share London",
    95  		Host:                           "manila2@generic1#GENERIC1",
    96  		HasReplicas:                    false,
    97  		ReplicationType:                "",
    98  		TaskState:                      "",
    99  		SnapshotSupport:                true,
   100  		CreateShareFromSnapshotSupport: true,
   101  		Name:                           "my_test_share",
   102  		CreatedAt:                      time.Date(2015, time.September, 18, 10, 25, 24, 0, time.UTC),
   103  		ShareProto:                     "NFS",
   104  		VolumeType:                     "default",
   105  		SourceCgsnapshotMemberID:       "",
   106  		IsPublic:                       true,
   107  		Links: []map[string]string{
   108  			{
   109  				"href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264",
   110  				"rel":  "self",
   111  			},
   112  			{
   113  				"href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264",
   114  				"rel":  "bookmark",
   115  			},
   116  		},
   117  	})
   118  }
   119  
   120  func TestListDetail(t *testing.T) {
   121  	th.SetupHTTP()
   122  	defer th.TeardownHTTP()
   123  
   124  	MockListDetailResponse(t)
   125  
   126  	allPages, err := shares.ListDetail(client.ServiceClient(), &shares.ListOpts{}).AllPages(context.TODO())
   127  
   128  	th.AssertNoErr(t, err)
   129  
   130  	actual, err := shares.ExtractShares(allPages)
   131  	th.AssertNoErr(t, err)
   132  
   133  	th.AssertDeepEquals(t, actual, []shares.Share{
   134  		{
   135  			AvailabilityZone:   "nova",
   136  			ShareNetworkID:     "713df749-aac0-4a54-af52-10f6c991e80c",
   137  			ShareServerID:      "e268f4aa-d571-43dd-9ab3-f49ad06ffaef",
   138  			SnapshotID:         "",
   139  			ID:                 shareID,
   140  			Size:               1,
   141  			ShareType:          "25747776-08e5-494f-ab40-a64b9d20d8f7",
   142  			ShareTypeName:      "default",
   143  			ConsistencyGroupID: "9397c191-8427-4661-a2e8-b23820dc01d4",
   144  			ProjectID:          "16e1ab15c35a457e9c2b2aa189f544e1",
   145  			Metadata: map[string]string{
   146  				"project": "my_app",
   147  				"aim":     "doc",
   148  			},
   149  			Status:                         "available",
   150  			Description:                    "My custom share London",
   151  			Host:                           "manila2@generic1#GENERIC1",
   152  			HasReplicas:                    false,
   153  			ReplicationType:                "",
   154  			TaskState:                      "",
   155  			SnapshotSupport:                true,
   156  			CreateShareFromSnapshotSupport: true,
   157  			Name:                           "my_test_share",
   158  			CreatedAt:                      time.Date(2015, time.September, 18, 10, 25, 24, 0, time.UTC),
   159  			ShareProto:                     "NFS",
   160  			VolumeType:                     "default",
   161  			SourceCgsnapshotMemberID:       "",
   162  			IsPublic:                       true,
   163  			Links: []map[string]string{
   164  				{
   165  					"href": "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264",
   166  					"rel":  "self",
   167  				},
   168  				{
   169  					"href": "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/011d21e2-fbc3-4e4a-9993-9ea223f73264",
   170  					"rel":  "bookmark",
   171  				},
   172  			},
   173  		},
   174  	})
   175  }
   176  
   177  func TestListExportLocationsSuccess(t *testing.T) {
   178  	th.SetupHTTP()
   179  	defer th.TeardownHTTP()
   180  
   181  	MockListExportLocationsResponse(t)
   182  
   183  	c := client.ServiceClient()
   184  	// Client c must have Microversion set; minimum supported microversion for List Export Locations is 2.9
   185  	c.Microversion = "2.9"
   186  
   187  	s, err := shares.ListExportLocations(context.TODO(), c, shareID).Extract()
   188  
   189  	th.AssertNoErr(t, err)
   190  	th.AssertDeepEquals(t, s, []shares.ExportLocation{
   191  		{
   192  			Path:            "127.0.0.1:/var/lib/manila/mnt/share-9a922036-ad26-4d27-b955-7a1e285fa74d",
   193  			ShareInstanceID: "011d21e2-fbc3-4e4a-9993-9ea223f73264",
   194  			IsAdminOnly:     false,
   195  			ID:              "80ed63fc-83bc-4afc-b881-da4a345ac83d",
   196  			Preferred:       false,
   197  		},
   198  	})
   199  }
   200  
   201  func TestGetExportLocationSuccess(t *testing.T) {
   202  	th.SetupHTTP()
   203  	defer th.TeardownHTTP()
   204  
   205  	MockGetExportLocationResponse(t)
   206  
   207  	c := client.ServiceClient()
   208  	// Client c must have Microversion set; minimum supported microversion for Get Export Location is 2.9
   209  	c.Microversion = "2.9"
   210  
   211  	s, err := shares.GetExportLocation(context.TODO(), c, shareID, "80ed63fc-83bc-4afc-b881-da4a345ac83d").Extract()
   212  
   213  	th.AssertNoErr(t, err)
   214  	th.AssertDeepEquals(t, s, &shares.ExportLocation{
   215  		Path:            "127.0.0.1:/var/lib/manila/mnt/share-9a922036-ad26-4d27-b955-7a1e285fa74d",
   216  		ShareInstanceID: "011d21e2-fbc3-4e4a-9993-9ea223f73264",
   217  		IsAdminOnly:     false,
   218  		ID:              "80ed63fc-83bc-4afc-b881-da4a345ac83d",
   219  		Preferred:       false,
   220  	})
   221  }
   222  
   223  func TestGrantAcessSuccess(t *testing.T) {
   224  	th.SetupHTTP()
   225  	defer th.TeardownHTTP()
   226  
   227  	MockGrantAccessResponse(t)
   228  
   229  	c := client.ServiceClient()
   230  	// Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7
   231  	c.Microversion = "2.7"
   232  
   233  	var grantAccessReq shares.GrantAccessOpts
   234  	grantAccessReq.AccessType = "ip"
   235  	grantAccessReq.AccessTo = "0.0.0.0/0"
   236  	grantAccessReq.AccessLevel = "rw"
   237  
   238  	s, err := shares.GrantAccess(context.TODO(), c, shareID, grantAccessReq).Extract()
   239  
   240  	th.AssertNoErr(t, err)
   241  	th.AssertDeepEquals(t, s, &shares.AccessRight{
   242  		ShareID:     "011d21e2-fbc3-4e4a-9993-9ea223f73264",
   243  		AccessType:  "ip",
   244  		AccessTo:    "0.0.0.0/0",
   245  		AccessKey:   "",
   246  		AccessLevel: "rw",
   247  		State:       "new",
   248  		ID:          "a2f226a5-cee8-430b-8a03-78a59bd84ee8",
   249  	})
   250  }
   251  
   252  func TestRevokeAccessSuccess(t *testing.T) {
   253  	th.SetupHTTP()
   254  	defer th.TeardownHTTP()
   255  
   256  	MockRevokeAccessResponse(t)
   257  
   258  	c := client.ServiceClient()
   259  	// Client c must have Microversion set; minimum supported microversion for Revoke Access is 2.7
   260  	c.Microversion = "2.7"
   261  
   262  	options := &shares.RevokeAccessOpts{AccessID: "a2f226a5-cee8-430b-8a03-78a59bd84ee8"}
   263  
   264  	err := shares.RevokeAccess(context.TODO(), c, shareID, options).ExtractErr()
   265  	th.AssertNoErr(t, err)
   266  }
   267  
   268  func TestListAccessRightsSuccess(t *testing.T) {
   269  	th.SetupHTTP()
   270  	defer th.TeardownHTTP()
   271  
   272  	MockListAccessRightsResponse(t)
   273  
   274  	c := client.ServiceClient()
   275  	// Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7
   276  	c.Microversion = "2.7"
   277  
   278  	s, err := shares.ListAccessRights(context.TODO(), c, shareID).Extract()
   279  
   280  	th.AssertNoErr(t, err)
   281  	th.AssertDeepEquals(t, s, []shares.AccessRight{
   282  		{
   283  			ShareID:     "011d21e2-fbc3-4e4a-9993-9ea223f73264",
   284  			AccessType:  "ip",
   285  			AccessTo:    "0.0.0.0/0",
   286  			AccessKey:   "",
   287  			AccessLevel: "rw",
   288  			State:       "new",
   289  			ID:          "a2f226a5-cee8-430b-8a03-78a59bd84ee8",
   290  		},
   291  	})
   292  }
   293  
   294  func TestExtendSuccess(t *testing.T) {
   295  	th.SetupHTTP()
   296  	defer th.TeardownHTTP()
   297  
   298  	MockExtendResponse(t)
   299  
   300  	c := client.ServiceClient()
   301  	// Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7
   302  	c.Microversion = "2.7"
   303  
   304  	err := shares.Extend(context.TODO(), c, shareID, &shares.ExtendOpts{NewSize: 2}).ExtractErr()
   305  	th.AssertNoErr(t, err)
   306  }
   307  
   308  func TestShrinkSuccess(t *testing.T) {
   309  	th.SetupHTTP()
   310  	defer th.TeardownHTTP()
   311  
   312  	MockShrinkResponse(t)
   313  
   314  	c := client.ServiceClient()
   315  	// Client c must have Microversion set; minimum supported microversion for Grant Access is 2.7
   316  	c.Microversion = "2.7"
   317  
   318  	err := shares.Shrink(context.TODO(), c, shareID, &shares.ShrinkOpts{NewSize: 1}).ExtractErr()
   319  	th.AssertNoErr(t, err)
   320  }
   321  
   322  func TestGetMetadataSuccess(t *testing.T) {
   323  	th.SetupHTTP()
   324  	defer th.TeardownHTTP()
   325  
   326  	MockGetMetadataResponse(t)
   327  
   328  	c := client.ServiceClient()
   329  
   330  	actual, err := shares.GetMetadata(context.TODO(), c, shareID).Extract()
   331  	th.AssertNoErr(t, err)
   332  	th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual)
   333  }
   334  
   335  func TestGetMetadatumSuccess(t *testing.T) {
   336  	th.SetupHTTP()
   337  	defer th.TeardownHTTP()
   338  
   339  	MockGetMetadatumResponse(t, "foo")
   340  
   341  	c := client.ServiceClient()
   342  
   343  	actual, err := shares.GetMetadatum(context.TODO(), c, shareID, "foo").Extract()
   344  	th.AssertNoErr(t, err)
   345  	th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual)
   346  }
   347  
   348  func TestSetMetadataSuccess(t *testing.T) {
   349  	th.SetupHTTP()
   350  	defer th.TeardownHTTP()
   351  
   352  	MockSetMetadataResponse(t)
   353  
   354  	c := client.ServiceClient()
   355  
   356  	actual, err := shares.SetMetadata(context.TODO(), c, shareID, &shares.SetMetadataOpts{Metadata: map[string]string{"foo": "bar"}}).Extract()
   357  	th.AssertNoErr(t, err)
   358  	th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual)
   359  }
   360  
   361  func TestUpdateMetadataSuccess(t *testing.T) {
   362  	th.SetupHTTP()
   363  	defer th.TeardownHTTP()
   364  
   365  	MockUpdateMetadataResponse(t)
   366  
   367  	c := client.ServiceClient()
   368  
   369  	actual, err := shares.UpdateMetadata(context.TODO(), c, shareID, &shares.UpdateMetadataOpts{Metadata: map[string]string{"foo": "bar"}}).Extract()
   370  	th.AssertNoErr(t, err)
   371  	th.AssertDeepEquals(t, map[string]string{"foo": "bar"}, actual)
   372  }
   373  
   374  func TestUnsetMetadataSuccess(t *testing.T) {
   375  	th.SetupHTTP()
   376  	defer th.TeardownHTTP()
   377  
   378  	MockDeleteMetadatumResponse(t, "foo")
   379  
   380  	c := client.ServiceClient()
   381  
   382  	err := shares.DeleteMetadatum(context.TODO(), c, shareID, "foo").ExtractErr()
   383  	th.AssertNoErr(t, err)
   384  }
   385  
   386  func TestRevertSuccess(t *testing.T) {
   387  	th.SetupHTTP()
   388  	defer th.TeardownHTTP()
   389  
   390  	MockRevertResponse(t)
   391  
   392  	c := client.ServiceClient()
   393  	// Client c must have Microversion set; minimum supported microversion for Revert is 2.27
   394  	c.Microversion = "2.27"
   395  
   396  	err := shares.Revert(context.TODO(), c, shareID, &shares.RevertOpts{SnapshotID: "ddeac769-9742-497f-b985-5bcfa94a3fd6"}).ExtractErr()
   397  	th.AssertNoErr(t, err)
   398  }
   399  
   400  func TestResetStatusSuccess(t *testing.T) {
   401  	th.SetupHTTP()
   402  	defer th.TeardownHTTP()
   403  
   404  	MockResetStatusResponse(t)
   405  
   406  	c := client.ServiceClient()
   407  	// Client c must have Microversion set; minimum supported microversion for ResetStatus is 2.7
   408  	c.Microversion = "2.7"
   409  
   410  	err := shares.ResetStatus(context.TODO(), c, shareID, &shares.ResetStatusOpts{Status: "error"}).ExtractErr()
   411  	th.AssertNoErr(t, err)
   412  }
   413  
   414  func TestForceDeleteSuccess(t *testing.T) {
   415  	th.SetupHTTP()
   416  	defer th.TeardownHTTP()
   417  
   418  	MockForceDeleteResponse(t)
   419  
   420  	c := client.ServiceClient()
   421  	// Client c must have Microversion set; minimum supported microversion for ForceDelete is 2.7
   422  	c.Microversion = "2.7"
   423  
   424  	err := shares.ForceDelete(context.TODO(), c, shareID).ExtractErr()
   425  	th.AssertNoErr(t, err)
   426  }
   427  
   428  func TestUnmanageSuccess(t *testing.T) {
   429  	th.SetupHTTP()
   430  	defer th.TeardownHTTP()
   431  
   432  	MockUnmanageResponse(t)
   433  
   434  	c := client.ServiceClient()
   435  	// Client c must have Microversion set; minimum supported microversion for Unmanage is 2.7
   436  	c.Microversion = "2.7"
   437  
   438  	err := shares.Unmanage(context.TODO(), c, shareID).ExtractErr()
   439  	th.AssertNoErr(t, err)
   440  }