github.com/cs3org/reva/v2@v2.27.7/pkg/user/manager/owncloudsql/accounts/accounts_test.go (about) 1 // Copyright 2018-2021 CERN 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 // In applying this license, CERN does not waive the privileges and immunities 16 // granted to it by virtue of its status as an Intergovernmental Organization 17 // or submit itself to any jurisdiction. 18 19 package accounts_test 20 21 import ( 22 "context" 23 "database/sql" 24 "os" 25 26 _ "github.com/mattn/go-sqlite3" 27 28 "github.com/cs3org/reva/v2/pkg/user/manager/owncloudsql/accounts" 29 30 . "github.com/onsi/ginkgo/v2" 31 . "github.com/onsi/gomega" 32 ) 33 34 var _ = Describe("Accounts", func() { 35 var ( 36 conn *accounts.Accounts 37 testDbFile *os.File 38 sqldb *sql.DB 39 ) 40 41 BeforeEach(func() { 42 var err error 43 testDbFile, err = os.CreateTemp("", "example") 44 Expect(err).ToNot(HaveOccurred()) 45 46 dbData, err := os.ReadFile("test.sqlite") 47 Expect(err).ToNot(HaveOccurred()) 48 49 _, err = testDbFile.Write(dbData) 50 Expect(err).ToNot(HaveOccurred()) 51 err = testDbFile.Close() 52 Expect(err).ToNot(HaveOccurred()) 53 54 sqldb, err = sql.Open("sqlite3", testDbFile.Name()) 55 Expect(err).ToNot(HaveOccurred()) 56 57 }) 58 59 AfterEach(func() { 60 os.Remove(testDbFile.Name()) 61 }) 62 63 Describe("GetAccountByClaim", func() { 64 65 Context("without any joins", func() { 66 67 BeforeEach(func() { 68 var err error 69 conn, err = accounts.New("sqlite3", sqldb, false, false, false) 70 Expect(err).ToNot(HaveOccurred()) 71 }) 72 73 It("gets existing account by userid", func() { 74 userID := "admin" 75 account, err := conn.GetAccountByClaim(context.Background(), "userid", userID) 76 Expect(err).ToNot(HaveOccurred()) 77 Expect(account).ToNot(BeNil()) 78 Expect(account.ID).To(Equal(uint64(1))) 79 Expect(account.Email.String).To(Equal("admin@example.org")) 80 Expect(account.UserID).To(Equal("admin")) 81 Expect(account.DisplayName.String).To(Equal("admin")) 82 Expect(account.Quota.String).To(Equal("100 GB")) 83 Expect(account.LastLogin).To(Equal(1619082575)) 84 Expect(account.Backend).To(Equal(`OC\User\Database`)) 85 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 86 Expect(account.State).To(Equal(int8(1))) 87 Expect(account.Username.String).To(Equal("admin")) 88 Expect(account.OwnCloudUUID.String).To(Equal("admin")) 89 }) 90 91 It("gets existing account by mail", func() { 92 value := "admin@example.org" 93 account, err := conn.GetAccountByClaim(context.Background(), "mail", value) 94 Expect(err).ToNot(HaveOccurred()) 95 Expect(account).ToNot(BeNil()) 96 Expect(account.ID).To(Equal(uint64(1))) 97 Expect(account.Email.String).To(Equal("admin@example.org")) 98 Expect(account.UserID).To(Equal("admin")) 99 Expect(account.DisplayName.String).To(Equal("admin")) 100 Expect(account.Quota.String).To(Equal("100 GB")) 101 Expect(account.LastLogin).To(Equal(1619082575)) 102 Expect(account.Backend).To(Equal(`OC\User\Database`)) 103 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 104 Expect(account.State).To(Equal(int8(1))) 105 Expect(account.Username.String).To(Equal("admin")) 106 Expect(account.OwnCloudUUID.String).To(Equal("admin")) 107 }) 108 109 It("falls back to user_id colum when getting by username", func() { 110 value := "admin" 111 account, err := conn.GetAccountByClaim(context.Background(), "username", value) 112 Expect(err).ToNot(HaveOccurred()) 113 Expect(account).ToNot(BeNil()) 114 Expect(account.ID).To(Equal(uint64(1))) 115 Expect(account.Email.String).To(Equal("admin@example.org")) 116 Expect(account.UserID).To(Equal("admin")) 117 Expect(account.DisplayName.String).To(Equal("admin")) 118 Expect(account.Quota.String).To(Equal("100 GB")) 119 Expect(account.LastLogin).To(Equal(1619082575)) 120 Expect(account.Backend).To(Equal(`OC\User\Database`)) 121 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 122 Expect(account.State).To(Equal(int8(1))) 123 Expect(account.Username.String).To(Equal("admin")) 124 Expect(account.OwnCloudUUID.String).To(Equal("admin")) 125 }) 126 127 It("errors on unsupported claim", func() { 128 _, err := conn.GetAccountByClaim(context.Background(), "invalid", "invalid") 129 Expect(err).To(HaveOccurred()) 130 }) 131 }) 132 133 Context("with username joins", func() { 134 135 BeforeEach(func() { 136 var err error 137 conn, err = accounts.New("sqlite3", sqldb, true, false, false) 138 Expect(err).ToNot(HaveOccurred()) 139 }) 140 141 It("gets existing account by userid", func() { 142 userID := "admin" 143 account, err := conn.GetAccountByClaim(context.Background(), "userid", userID) 144 Expect(err).ToNot(HaveOccurred()) 145 Expect(account).ToNot(BeNil()) 146 Expect(account.ID).To(Equal(uint64(1))) 147 Expect(account.Email.String).To(Equal("admin@example.org")) 148 Expect(account.UserID).To(Equal("admin")) 149 Expect(account.DisplayName.String).To(Equal("admin")) 150 Expect(account.Quota.String).To(Equal("100 GB")) 151 Expect(account.LastLogin).To(Equal(1619082575)) 152 Expect(account.Backend).To(Equal(`OC\User\Database`)) 153 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 154 Expect(account.State).To(Equal(int8(1))) 155 Expect(account.Username.String).To(Equal("Administrator")) 156 Expect(account.OwnCloudUUID.String).To(Equal("admin")) 157 }) 158 159 It("gets existing account by mail", func() { 160 value := "admin@example.org" 161 account, err := conn.GetAccountByClaim(context.Background(), "mail", value) 162 Expect(err).ToNot(HaveOccurred()) 163 Expect(account).ToNot(BeNil()) 164 Expect(account.ID).To(Equal(uint64(1))) 165 Expect(account.Email.String).To(Equal("admin@example.org")) 166 Expect(account.UserID).To(Equal("admin")) 167 Expect(account.DisplayName.String).To(Equal("admin")) 168 Expect(account.Quota.String).To(Equal("100 GB")) 169 Expect(account.LastLogin).To(Equal(1619082575)) 170 Expect(account.Backend).To(Equal(`OC\User\Database`)) 171 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 172 Expect(account.State).To(Equal(int8(1))) 173 Expect(account.Username.String).To(Equal("Administrator")) 174 Expect(account.OwnCloudUUID.String).To(Equal("admin")) 175 }) 176 177 It("gets existing account by username", func() { 178 value := "Administrator" 179 account, err := conn.GetAccountByClaim(context.Background(), "username", value) 180 Expect(err).ToNot(HaveOccurred()) 181 Expect(account).ToNot(BeNil()) 182 Expect(account.ID).To(Equal(uint64(1))) 183 Expect(account.Email.String).To(Equal("admin@example.org")) 184 Expect(account.UserID).To(Equal("admin")) 185 Expect(account.DisplayName.String).To(Equal("admin")) 186 Expect(account.Quota.String).To(Equal("100 GB")) 187 Expect(account.LastLogin).To(Equal(1619082575)) 188 Expect(account.Backend).To(Equal(`OC\User\Database`)) 189 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 190 Expect(account.State).To(Equal(int8(1))) 191 Expect(account.Username.String).To(Equal("Administrator")) 192 Expect(account.OwnCloudUUID.String).To(Equal("admin")) 193 }) 194 195 It("errors on unsupported claim", func() { 196 _, err := conn.GetAccountByClaim(context.Background(), "invalid", "invalid") 197 Expect(err).To(HaveOccurred()) 198 }) 199 }) 200 201 Context("with uuid joins", func() { 202 203 BeforeEach(func() { 204 var err error 205 conn, err = accounts.New("sqlite3", sqldb, false, true, false) 206 Expect(err).ToNot(HaveOccurred()) 207 }) 208 209 It("gets existing account by uuid", func() { 210 userID := "7015b5ec-7723-4560-bb96-85e18a947314" 211 account, err := conn.GetAccountByClaim(context.Background(), "userid", userID) 212 Expect(err).ToNot(HaveOccurred()) 213 Expect(account).ToNot(BeNil()) 214 Expect(account.ID).To(Equal(uint64(1))) 215 Expect(account.Email.String).To(Equal("admin@example.org")) 216 Expect(account.UserID).To(Equal("admin")) 217 Expect(account.DisplayName.String).To(Equal("admin")) 218 Expect(account.Quota.String).To(Equal("100 GB")) 219 Expect(account.LastLogin).To(Equal(1619082575)) 220 Expect(account.Backend).To(Equal(`OC\User\Database`)) 221 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 222 Expect(account.State).To(Equal(int8(1))) 223 Expect(account.Username.String).To(Equal("admin")) 224 Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314")) 225 }) 226 227 It("gets existing account by mail", func() { 228 value := "admin@example.org" 229 account, err := conn.GetAccountByClaim(context.Background(), "mail", value) 230 Expect(err).ToNot(HaveOccurred()) 231 Expect(account).ToNot(BeNil()) 232 Expect(account.ID).To(Equal(uint64(1))) 233 Expect(account.Email.String).To(Equal("admin@example.org")) 234 Expect(account.UserID).To(Equal("admin")) 235 Expect(account.DisplayName.String).To(Equal("admin")) 236 Expect(account.Quota.String).To(Equal("100 GB")) 237 Expect(account.LastLogin).To(Equal(1619082575)) 238 Expect(account.Backend).To(Equal(`OC\User\Database`)) 239 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 240 Expect(account.State).To(Equal(int8(1))) 241 Expect(account.Username.String).To(Equal("admin")) 242 Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314")) 243 }) 244 245 It("gets existing account by username", func() { 246 value := "admin" 247 account, err := conn.GetAccountByClaim(context.Background(), "username", value) 248 Expect(err).ToNot(HaveOccurred()) 249 Expect(account).ToNot(BeNil()) 250 Expect(account.ID).To(Equal(uint64(1))) 251 Expect(account.Email.String).To(Equal("admin@example.org")) 252 Expect(account.UserID).To(Equal("admin")) 253 Expect(account.DisplayName.String).To(Equal("admin")) 254 Expect(account.Quota.String).To(Equal("100 GB")) 255 Expect(account.LastLogin).To(Equal(1619082575)) 256 Expect(account.Backend).To(Equal(`OC\User\Database`)) 257 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 258 Expect(account.State).To(Equal(int8(1))) 259 Expect(account.Username.String).To(Equal("admin")) 260 Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314")) 261 }) 262 263 It("errors on unsupported claim", func() { 264 _, err := conn.GetAccountByClaim(context.Background(), "invalid", "invalid") 265 Expect(err).To(HaveOccurred()) 266 }) 267 }) 268 269 Context("with username and uuid joins", func() { 270 271 BeforeEach(func() { 272 var err error 273 conn, err = accounts.New("sqlite3", sqldb, true, true, false) 274 Expect(err).ToNot(HaveOccurred()) 275 }) 276 277 It("gets existing account by uuid", func() { 278 userID := "7015b5ec-7723-4560-bb96-85e18a947314" 279 account, err := conn.GetAccountByClaim(context.Background(), "userid", userID) 280 Expect(err).ToNot(HaveOccurred()) 281 Expect(account.ID).To(Equal(uint64(1))) 282 Expect(account.Email.String).To(Equal("admin@example.org")) 283 Expect(account.UserID).To(Equal("admin")) 284 Expect(account.DisplayName.String).To(Equal("admin")) 285 Expect(account.Quota.String).To(Equal("100 GB")) 286 Expect(account.LastLogin).To(Equal(1619082575)) 287 Expect(account.Backend).To(Equal(`OC\User\Database`)) 288 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 289 Expect(account.State).To(Equal(int8(1))) 290 Expect(account.Username.String).To(Equal("Administrator")) 291 Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314")) 292 }) 293 294 It("gets existing account by mail", func() { 295 value := "admin@example.org" 296 account, err := conn.GetAccountByClaim(context.Background(), "mail", value) 297 Expect(err).ToNot(HaveOccurred()) 298 Expect(account).ToNot(BeNil()) 299 Expect(account.ID).To(Equal(uint64(1))) 300 Expect(account.Email.String).To(Equal("admin@example.org")) 301 Expect(account.UserID).To(Equal("admin")) 302 Expect(account.DisplayName.String).To(Equal("admin")) 303 Expect(account.Quota.String).To(Equal("100 GB")) 304 Expect(account.LastLogin).To(Equal(1619082575)) 305 Expect(account.Backend).To(Equal(`OC\User\Database`)) 306 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 307 Expect(account.State).To(Equal(int8(1))) 308 Expect(account.Username.String).To(Equal("Administrator")) 309 Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314")) 310 }) 311 312 It("gets existing account by username", func() { 313 value := "Administrator" 314 account, err := conn.GetAccountByClaim(context.Background(), "username", value) 315 Expect(err).ToNot(HaveOccurred()) 316 Expect(account).ToNot(BeNil()) 317 Expect(account.ID).To(Equal(uint64(1))) 318 Expect(account.Email.String).To(Equal("admin@example.org")) 319 Expect(account.UserID).To(Equal("admin")) 320 Expect(account.DisplayName.String).To(Equal("admin")) 321 Expect(account.Quota.String).To(Equal("100 GB")) 322 Expect(account.LastLogin).To(Equal(1619082575)) 323 Expect(account.Backend).To(Equal(`OC\User\Database`)) 324 Expect(account.Home).To(Equal("/mnt/data/files/admin")) 325 Expect(account.State).To(Equal(int8(1))) 326 Expect(account.Username.String).To(Equal("Administrator")) 327 Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314")) 328 }) 329 330 It("errors on unsupported claim", func() { 331 _, err := conn.GetAccountByClaim(context.Background(), "invalid", "invalid") 332 Expect(err).To(HaveOccurred()) 333 }) 334 }) 335 336 }) 337 338 Describe("FindAccounts", func() { 339 340 Context("with username and uuid joins", func() { 341 342 BeforeEach(func() { 343 var err error 344 conn, err = accounts.New("sqlite3", sqldb, true, true, false) 345 Expect(err).ToNot(HaveOccurred()) 346 }) 347 348 It("finds the existing admin account", func() { 349 accounts, err := conn.FindAccounts(context.Background(), "admin") 350 Expect(err).ToNot(HaveOccurred()) 351 Expect(len(accounts)).To(Equal(1)) 352 Expect(accounts[0]).ToNot(BeNil()) 353 Expect(accounts[0].ID).To(Equal(uint64(1))) 354 Expect(accounts[0].Email.String).To(Equal("admin@example.org")) 355 Expect(accounts[0].UserID).To(Equal("admin")) 356 Expect(accounts[0].DisplayName.String).To(Equal("admin")) 357 Expect(accounts[0].Quota.String).To(Equal("100 GB")) 358 Expect(accounts[0].LastLogin).To(Equal(1619082575)) 359 Expect(accounts[0].Backend).To(Equal(`OC\User\Database`)) 360 Expect(accounts[0].Home).To(Equal("/mnt/data/files/admin")) 361 Expect(accounts[0].State).To(Equal(int8(1))) 362 Expect(accounts[0].Username.String).To(Equal("Administrator")) 363 Expect(accounts[0].OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314")) 364 }) 365 366 It("handles query without results", func() { 367 accounts, err := conn.FindAccounts(context.Background(), "__notexisting__") 368 Expect(err).ToNot(HaveOccurred()) 369 Expect(len(accounts)).To(Equal(0)) 370 }) 371 }) 372 373 Context("with username joins", func() { 374 375 BeforeEach(func() { 376 var err error 377 conn, err = accounts.New("sqlite3", sqldb, true, false, false) 378 Expect(err).ToNot(HaveOccurred()) 379 }) 380 381 It("finds the existing admin account", func() { 382 accounts, err := conn.FindAccounts(context.Background(), "admin") 383 Expect(err).ToNot(HaveOccurred()) 384 Expect(len(accounts)).To(Equal(1)) 385 Expect(accounts[0]).ToNot(BeNil()) 386 Expect(accounts[0].ID).To(Equal(uint64(1))) 387 Expect(accounts[0].Email.String).To(Equal("admin@example.org")) 388 Expect(accounts[0].UserID).To(Equal("admin")) 389 Expect(accounts[0].DisplayName.String).To(Equal("admin")) 390 Expect(accounts[0].Quota.String).To(Equal("100 GB")) 391 Expect(accounts[0].LastLogin).To(Equal(1619082575)) 392 Expect(accounts[0].Backend).To(Equal(`OC\User\Database`)) 393 Expect(accounts[0].Home).To(Equal("/mnt/data/files/admin")) 394 Expect(accounts[0].State).To(Equal(int8(1))) 395 Expect(accounts[0].Username.String).To(Equal("Administrator")) 396 Expect(accounts[0].OwnCloudUUID.String).To(Equal("admin")) 397 }) 398 399 It("handles query without results", func() { 400 accounts, err := conn.FindAccounts(context.Background(), "__notexisting__") 401 Expect(err).ToNot(HaveOccurred()) 402 Expect(len(accounts)).To(Equal(0)) 403 }) 404 }) 405 406 Context("without any joins", func() { 407 408 BeforeEach(func() { 409 var err error 410 conn, err = accounts.New("sqlite3", sqldb, false, false, false) 411 Expect(err).ToNot(HaveOccurred()) 412 }) 413 414 It("finds the existing admin account", func() { 415 accounts, err := conn.FindAccounts(context.Background(), "admin") 416 Expect(err).ToNot(HaveOccurred()) 417 Expect(len(accounts)).To(Equal(1)) 418 Expect(accounts[0]).ToNot(BeNil()) 419 Expect(accounts[0].ID).To(Equal(uint64(1))) 420 Expect(accounts[0].Email.String).To(Equal("admin@example.org")) 421 Expect(accounts[0].UserID).To(Equal("admin")) 422 Expect(accounts[0].DisplayName.String).To(Equal("admin")) 423 Expect(accounts[0].Quota.String).To(Equal("100 GB")) 424 Expect(accounts[0].LastLogin).To(Equal(1619082575)) 425 Expect(accounts[0].Backend).To(Equal(`OC\User\Database`)) 426 Expect(accounts[0].Home).To(Equal("/mnt/data/files/admin")) 427 Expect(accounts[0].State).To(Equal(int8(1))) 428 Expect(accounts[0].Username.String).To(Equal("admin")) 429 Expect(accounts[0].OwnCloudUUID.String).To(Equal("admin")) 430 }) 431 432 It("handles query without results", func() { 433 accounts, err := conn.FindAccounts(context.Background(), "__notexisting__") 434 Expect(err).ToNot(HaveOccurred()) 435 Expect(len(accounts)).To(Equal(0)) 436 }) 437 }) 438 }) 439 440 Describe("GetAccountGroups", func() { 441 BeforeEach(func() { 442 var err error 443 conn, err = accounts.New("sqlite3", sqldb, true, true, false) 444 Expect(err).ToNot(HaveOccurred()) 445 }) 446 It("get admin group for admin account", func() { 447 accounts, err := conn.GetAccountGroups(context.Background(), "admin") 448 Expect(err).ToNot(HaveOccurred()) 449 Expect(len(accounts)).To(Equal(1)) 450 Expect(accounts[0]).To(Equal("admin")) 451 }) 452 It("handles not existing account", func() { 453 accounts, err := conn.GetAccountGroups(context.Background(), "__notexisting__") 454 Expect(err).ToNot(HaveOccurred()) 455 Expect(len(accounts)).To(Equal(0)) 456 }) 457 }) 458 })