github.com/cs3org/reva/v2@v2.27.7/pkg/auth/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/auth/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("GetAccountByLogin", 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 mail", func() {
    74  				value := "admin@example.org"
    75  				account, err := conn.GetAccountByLogin(context.Background(), value)
    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 username", func() {
    92  				value := "admin"
    93  				account, err := conn.GetAccountByLogin(context.Background(), 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  		})
   110  
   111  		Context("with username joins", func() {
   112  
   113  			BeforeEach(func() {
   114  				var err error
   115  				conn, err = accounts.New("sqlite3", sqldb, true, false, false)
   116  				Expect(err).ToNot(HaveOccurred())
   117  			})
   118  
   119  			It("gets existing account by mail", func() {
   120  				value := "admin@example.org"
   121  				account, err := conn.GetAccountByLogin(context.Background(), value)
   122  				Expect(err).ToNot(HaveOccurred())
   123  				Expect(account).ToNot(BeNil())
   124  				Expect(account.ID).To(Equal(uint64(1)))
   125  				Expect(account.Email.String).To(Equal("admin@example.org"))
   126  				Expect(account.UserID).To(Equal("admin"))
   127  				Expect(account.DisplayName.String).To(Equal("admin"))
   128  				Expect(account.Quota.String).To(Equal("100 GB"))
   129  				Expect(account.LastLogin).To(Equal(1619082575))
   130  				Expect(account.Backend).To(Equal(`OC\User\Database`))
   131  				Expect(account.Home).To(Equal("/mnt/data/files/admin"))
   132  				Expect(account.State).To(Equal(int8(1)))
   133  				Expect(account.Username.String).To(Equal("Administrator"))
   134  				Expect(account.OwnCloudUUID.String).To(Equal("admin"))
   135  			})
   136  
   137  			It("gets existing account by username", func() {
   138  				value := "admin"
   139  				account, err := conn.GetAccountByLogin(context.Background(), value)
   140  				Expect(err).ToNot(HaveOccurred())
   141  				Expect(account).ToNot(BeNil())
   142  				Expect(account.ID).To(Equal(uint64(1)))
   143  				Expect(account.Email.String).To(Equal("admin@example.org"))
   144  				Expect(account.UserID).To(Equal("admin"))
   145  				Expect(account.DisplayName.String).To(Equal("admin"))
   146  				Expect(account.Quota.String).To(Equal("100 GB"))
   147  				Expect(account.LastLogin).To(Equal(1619082575))
   148  				Expect(account.Backend).To(Equal(`OC\User\Database`))
   149  				Expect(account.Home).To(Equal("/mnt/data/files/admin"))
   150  				Expect(account.State).To(Equal(int8(1)))
   151  				Expect(account.Username.String).To(Equal("Administrator"))
   152  				Expect(account.OwnCloudUUID.String).To(Equal("admin"))
   153  			})
   154  		})
   155  
   156  		Context("with uuid joins", func() {
   157  
   158  			BeforeEach(func() {
   159  				var err error
   160  				conn, err = accounts.New("sqlite3", sqldb, false, true, false)
   161  				Expect(err).ToNot(HaveOccurred())
   162  			})
   163  
   164  			It("gets existing account by mail", func() {
   165  				value := "admin@example.org"
   166  				account, err := conn.GetAccountByLogin(context.Background(), value)
   167  				Expect(err).ToNot(HaveOccurred())
   168  				Expect(account).ToNot(BeNil())
   169  				Expect(account.ID).To(Equal(uint64(1)))
   170  				Expect(account.Email.String).To(Equal("admin@example.org"))
   171  				Expect(account.UserID).To(Equal("admin"))
   172  				Expect(account.DisplayName.String).To(Equal("admin"))
   173  				Expect(account.Quota.String).To(Equal("100 GB"))
   174  				Expect(account.LastLogin).To(Equal(1619082575))
   175  				Expect(account.Backend).To(Equal(`OC\User\Database`))
   176  				Expect(account.Home).To(Equal("/mnt/data/files/admin"))
   177  				Expect(account.State).To(Equal(int8(1)))
   178  				Expect(account.Username.String).To(Equal("admin"))
   179  				Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314"))
   180  			})
   181  
   182  			It("gets existing account by username", func() {
   183  				value := "admin"
   184  				account, err := conn.GetAccountByLogin(context.Background(), value)
   185  				Expect(err).ToNot(HaveOccurred())
   186  				Expect(account).ToNot(BeNil())
   187  				Expect(account.ID).To(Equal(uint64(1)))
   188  				Expect(account.Email.String).To(Equal("admin@example.org"))
   189  				Expect(account.UserID).To(Equal("admin"))
   190  				Expect(account.DisplayName.String).To(Equal("admin"))
   191  				Expect(account.Quota.String).To(Equal("100 GB"))
   192  				Expect(account.LastLogin).To(Equal(1619082575))
   193  				Expect(account.Backend).To(Equal(`OC\User\Database`))
   194  				Expect(account.Home).To(Equal("/mnt/data/files/admin"))
   195  				Expect(account.State).To(Equal(int8(1)))
   196  				Expect(account.Username.String).To(Equal("admin"))
   197  				Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314"))
   198  			})
   199  
   200  		})
   201  
   202  		Context("with username and uuid joins", func() {
   203  
   204  			BeforeEach(func() {
   205  				var err error
   206  				conn, err = accounts.New("sqlite3", sqldb, true, true, false)
   207  				Expect(err).ToNot(HaveOccurred())
   208  			})
   209  
   210  			It("gets existing account by mail", func() {
   211  				value := "admin@example.org"
   212  				account, err := conn.GetAccountByLogin(context.Background(), value)
   213  				Expect(err).ToNot(HaveOccurred())
   214  				Expect(account).ToNot(BeNil())
   215  				Expect(account.ID).To(Equal(uint64(1)))
   216  				Expect(account.Email.String).To(Equal("admin@example.org"))
   217  				Expect(account.UserID).To(Equal("admin"))
   218  				Expect(account.DisplayName.String).To(Equal("admin"))
   219  				Expect(account.Quota.String).To(Equal("100 GB"))
   220  				Expect(account.LastLogin).To(Equal(1619082575))
   221  				Expect(account.Backend).To(Equal(`OC\User\Database`))
   222  				Expect(account.Home).To(Equal("/mnt/data/files/admin"))
   223  				Expect(account.State).To(Equal(int8(1)))
   224  				Expect(account.Username.String).To(Equal("Administrator"))
   225  				Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314"))
   226  			})
   227  
   228  			It("gets existing account by username", func() {
   229  				value := "Administrator"
   230  				account, err := conn.GetAccountByLogin(context.Background(), value)
   231  				Expect(err).ToNot(HaveOccurred())
   232  				Expect(account).ToNot(BeNil())
   233  				Expect(account.ID).To(Equal(uint64(1)))
   234  				Expect(account.Email.String).To(Equal("admin@example.org"))
   235  				Expect(account.UserID).To(Equal("admin"))
   236  				Expect(account.DisplayName.String).To(Equal("admin"))
   237  				Expect(account.Quota.String).To(Equal("100 GB"))
   238  				Expect(account.LastLogin).To(Equal(1619082575))
   239  				Expect(account.Backend).To(Equal(`OC\User\Database`))
   240  				Expect(account.Home).To(Equal("/mnt/data/files/admin"))
   241  				Expect(account.State).To(Equal(int8(1)))
   242  				Expect(account.Username.String).To(Equal("Administrator"))
   243  				Expect(account.OwnCloudUUID.String).To(Equal("7015b5ec-7723-4560-bb96-85e18a947314"))
   244  			})
   245  
   246  		})
   247  
   248  	})
   249  
   250  	Describe("GetAccountGroups", func() {
   251  		BeforeEach(func() {
   252  			var err error
   253  			conn, err = accounts.New("sqlite3", sqldb, true, true, false)
   254  			Expect(err).ToNot(HaveOccurred())
   255  		})
   256  		It("get admin group for admin account", func() {
   257  			accounts, err := conn.GetAccountGroups(context.Background(), "admin")
   258  			Expect(err).ToNot(HaveOccurred())
   259  			Expect(len(accounts)).To(Equal(1))
   260  			Expect(accounts[0]).To(Equal("admin"))
   261  		})
   262  		It("handles not existing account", func() {
   263  			accounts, err := conn.GetAccountGroups(context.Background(), "__notexisting__")
   264  			Expect(err).ToNot(HaveOccurred())
   265  			Expect(len(accounts)).To(Equal(0))
   266  		})
   267  	})
   268  })