github.com/gophercloud/gophercloud@v1.11.0/openstack/sharedfilesystems/v2/replicas/testing/request_test.go (about) 1 package testing 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/gophercloud/gophercloud" 8 "github.com/gophercloud/gophercloud/openstack/sharedfilesystems/v2/replicas" 9 th "github.com/gophercloud/gophercloud/testhelper" 10 "github.com/gophercloud/gophercloud/testhelper/client" 11 ) 12 13 func getClient(microVersion string) *gophercloud.ServiceClient { 14 c := client.ServiceClient() 15 c.Type = "sharev2" 16 c.Microversion = microVersion 17 return c 18 } 19 20 func TestCreate(t *testing.T) { 21 th.SetupHTTP() 22 defer th.TeardownHTTP() 23 24 MockCreateResponse(t) 25 26 options := &replicas.CreateOpts{ 27 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 28 AvailabilityZone: "zone-1", 29 } 30 actual, err := replicas.Create(getClient("2.11"), options).Extract() 31 32 expected := &replicas.Replica{ 33 ID: "3b9c33e8-b136-45c6-84a6-019c8db1d550", 34 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 35 AvailabilityZone: "zone-1", 36 Status: "creating", 37 ShareNetworkID: "ca0163c8-3941-4420-8b01-41517e19e366", 38 CreatedAt: time.Date(2023, time.May, 26, 12, 32, 56, 391337000, time.UTC), //"2023-05-26T12:32:56.391337", 39 } 40 41 th.AssertNoErr(t, err) 42 th.AssertDeepEquals(t, expected, actual) 43 } 44 45 func TestDelete(t *testing.T) { 46 th.SetupHTTP() 47 defer th.TeardownHTTP() 48 49 MockDeleteResponse(t) 50 51 result := replicas.Delete(getClient("2.11"), replicaID) 52 th.AssertNoErr(t, result.Err) 53 } 54 55 func TestForceDeleteSuccess(t *testing.T) { 56 th.SetupHTTP() 57 defer th.TeardownHTTP() 58 59 MockForceDeleteResponse(t) 60 61 err := replicas.ForceDelete(getClient("2.11"), replicaID).ExtractErr() 62 th.AssertNoErr(t, err) 63 } 64 65 func TestGet(t *testing.T) { 66 th.SetupHTTP() 67 defer th.TeardownHTTP() 68 69 MockGetResponse(t) 70 71 actual, err := replicas.Get(getClient("2.11"), replicaID).Extract() 72 73 expected := &replicas.Replica{ 74 AvailabilityZone: "zone-1", 75 ShareNetworkID: "ca0163c8-3941-4420-8b01-41517e19e366", 76 ShareServerID: "5ccc1b0c-334a-4e46-81e6-b52e03223060", 77 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 78 ID: replicaID, 79 Status: "available", 80 State: "active", 81 CreatedAt: time.Date(2023, time.May, 26, 12, 32, 56, 391337000, time.UTC), 82 UpdatedAt: time.Date(2023, time.May, 26, 12, 33, 28, 265716000, time.UTC), 83 } 84 85 th.AssertNoErr(t, err) 86 th.AssertDeepEquals(t, expected, actual) 87 } 88 89 func TestList(t *testing.T) { 90 th.SetupHTTP() 91 defer th.TeardownHTTP() 92 93 MockListResponse(t) 94 95 listOpts := &replicas.ListOpts{ 96 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 97 } 98 allPages, err := replicas.List(getClient("2.11"), listOpts).AllPages() 99 th.AssertNoErr(t, err) 100 101 actual, err := replicas.ExtractReplicas(allPages) 102 th.AssertNoErr(t, err) 103 104 expected := []replicas.Replica{ 105 { 106 ID: replicaID, 107 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 108 Status: "available", 109 State: "active", 110 }, 111 { 112 ID: "4b70c2e2-eec7-4699-880d-4da9051ca162", 113 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 114 Status: "available", 115 State: "out_of_sync", 116 }, 117 { 118 ID: "920bb037-bdd7-48a1-98f0-1aa1787ca3eb", 119 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 120 Status: "available", 121 State: "in_sync", 122 }, 123 } 124 125 th.AssertDeepEquals(t, expected, actual) 126 } 127 128 func TestListDetail(t *testing.T) { 129 th.SetupHTTP() 130 defer th.TeardownHTTP() 131 132 MockListDetailResponse(t) 133 134 listOpts := &replicas.ListOpts{ 135 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 136 } 137 allPages, err := replicas.ListDetail(getClient("2.11"), listOpts).AllPages() 138 th.AssertNoErr(t, err) 139 140 actual, err := replicas.ExtractReplicas(allPages) 141 th.AssertNoErr(t, err) 142 143 expected := []replicas.Replica{ 144 { 145 AvailabilityZone: "zone-1", 146 ShareNetworkID: "ca0163c8-3941-4420-8b01-41517e19e366", 147 ShareServerID: "5ccc1b0c-334a-4e46-81e6-b52e03223060", 148 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 149 ID: replicaID, 150 Status: "available", 151 State: "active", 152 CreatedAt: time.Date(2023, time.May, 26, 12, 32, 56, 391337000, time.UTC), 153 UpdatedAt: time.Date(2023, time.May, 26, 12, 33, 28, 265716000, time.UTC), 154 }, 155 { 156 AvailabilityZone: "zone-2", 157 ShareNetworkID: "ca0163c8-3941-4420-8b01-41517e19e366", 158 ShareServerID: "81aa586e-3a03-4f92-98bd-807d87a61c1a", 159 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 160 ID: "4b70c2e2-eec7-4699-880d-4da9051ca162", 161 Status: "available", 162 State: "out_of_sync", 163 CreatedAt: time.Date(2023, time.May, 26, 11, 59, 38, 313089000, time.UTC), 164 UpdatedAt: time.Date(2023, time.May, 26, 12, 00, 04, 321081000, time.UTC), 165 }, 166 { 167 AvailabilityZone: "zone-1", 168 ShareNetworkID: "ca0163c8-3941-4420-8b01-41517e19e366", 169 ShareServerID: "b87ea601-7d4c-47f3-8956-6876b7a6b6db", 170 ShareID: "65a34695-f9e5-4eea-b48d-a0b261d82943", 171 ID: "920bb037-bdd7-48a1-98f0-1aa1787ca3eb", 172 Status: "available", 173 State: "in_sync", 174 CreatedAt: time.Date(2023, time.May, 26, 12, 32, 45, 751834000, time.UTC), 175 UpdatedAt: time.Date(2023, time.May, 26, 12, 36, 04, 110328000, time.UTC), 176 }, 177 } 178 179 th.AssertDeepEquals(t, expected, actual) 180 } 181 182 func TestListExportLocationsSuccess(t *testing.T) { 183 th.SetupHTTP() 184 defer th.TeardownHTTP() 185 186 MockListExportLocationsResponse(t) 187 188 actual, err := replicas.ListExportLocations(getClient("2.47"), replicaID).Extract() 189 190 expected := []replicas.ExportLocation{ 191 { 192 ID: "3fc02d3c-da47-42a2-88b8-2d48f8c276bd", 193 Path: "192.168.1.123:/var/lib/manila/mnt/share-3b9c33e8-b136-45c6-84a6-019c8db1d550", 194 Preferred: true, 195 State: "active", 196 AvailabilityZone: "zone-1", 197 }, 198 { 199 ID: "ae73e762-e8b9-4aad-aad3-23afb7cd6825", 200 Path: "192.168.1.124:/var/lib/manila/mnt/share-3b9c33e8-b136-45c6-84a6-019c8db1d550", 201 Preferred: false, 202 State: "active", 203 AvailabilityZone: "zone-1", 204 }, 205 } 206 207 th.AssertNoErr(t, err) 208 th.AssertDeepEquals(t, expected, actual) 209 } 210 211 func TestGetExportLocationSuccess(t *testing.T) { 212 th.SetupHTTP() 213 defer th.TeardownHTTP() 214 215 MockGetExportLocationResponse(t) 216 217 s, err := replicas.GetExportLocation(getClient("2.47"), replicaID, "ae73e762-e8b9-4aad-aad3-23afb7cd6825").Extract() 218 219 th.AssertNoErr(t, err) 220 th.AssertDeepEquals(t, s, &replicas.ExportLocation{ 221 Path: "192.168.1.124:/var/lib/manila/mnt/share-3b9c33e8-b136-45c6-84a6-019c8db1d550", 222 ID: "ae73e762-e8b9-4aad-aad3-23afb7cd6825", 223 Preferred: false, 224 State: "active", 225 AvailabilityZone: "zone-1", 226 CreatedAt: time.Date(2023, time.May, 26, 12, 44, 33, 987960000, time.UTC), 227 UpdatedAt: time.Date(2023, time.May, 26, 12, 44, 33, 958363000, time.UTC), 228 }) 229 } 230 231 func TestResetStatusSuccess(t *testing.T) { 232 th.SetupHTTP() 233 defer th.TeardownHTTP() 234 235 MockResetStatusResponse(t) 236 237 err := replicas.ResetStatus(getClient("2.11"), replicaID, &replicas.ResetStatusOpts{Status: "available"}).ExtractErr() 238 th.AssertNoErr(t, err) 239 } 240 241 func TestResetStateSuccess(t *testing.T) { 242 th.SetupHTTP() 243 defer th.TeardownHTTP() 244 245 MockResetStateResponse(t) 246 247 err := replicas.ResetState(getClient("2.11"), replicaID, &replicas.ResetStateOpts{State: "active"}).ExtractErr() 248 th.AssertNoErr(t, err) 249 } 250 251 func TestResyncSuccess(t *testing.T) { 252 th.SetupHTTP() 253 defer th.TeardownHTTP() 254 255 MockResyncResponse(t) 256 257 err := replicas.Resync(getClient("2.11"), replicaID).ExtractErr() 258 th.AssertNoErr(t, err) 259 } 260 261 func TestPromoteSuccess(t *testing.T) { 262 th.SetupHTTP() 263 defer th.TeardownHTTP() 264 265 MockPromoteResponse(t) 266 267 err := replicas.Promote(getClient("2.11"), replicaID, &replicas.PromoteOpts{QuiesceWaitTime: 30}).ExtractErr() 268 th.AssertNoErr(t, err) 269 }