github.com/gophercloud/gophercloud@v1.11.0/openstack/sharedfilesystems/v2/shares/testing/request_test.go (about)

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