github.com/adecaro/fabric-ca@v2.0.0-alpha+incompatible/lib/server/db/sqlite/sqlite_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package sqlite_test 8 9 import ( 10 "context" 11 "errors" 12 "os" 13 14 "github.com/hyperledger/fabric-ca/lib/server/db/sqlite" 15 "github.com/hyperledger/fabric-ca/lib/server/db/sqlite/mocks" 16 "github.com/hyperledger/fabric/common/metrics/disabled" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 ) 20 21 const ( 22 testdataDir = "../../../../../testdata" 23 dbName = "fabric_ca.db" 24 ) 25 26 var _ = Describe("Sqlite", func() { 27 var ( 28 err error 29 db *sqlite.Sqlite 30 mockDB *mocks.FabricCADB 31 mockCreateTx *mocks.Create 32 ) 33 34 BeforeEach(func() { 35 db = sqlite.NewDB(dbName, "", &disabled.Provider{}) 36 mockDB = &mocks.FabricCADB{} 37 mockCreateTx = &mocks.Create{} 38 }) 39 40 AfterEach(func() { 41 os.Remove(dbName) 42 }) 43 44 It("connect to database", func() { 45 err := db.Connect() 46 Expect(err).NotTo(HaveOccurred()) 47 }) 48 49 It("returns no error when creating databse", func() { 50 err := db.Connect() 51 Expect(err).NotTo(HaveOccurred()) 52 _, err = db.Create() 53 Expect(err).NotTo(HaveOccurred()) 54 }) 55 56 Context("pinging database", func() { 57 It("returns an error if unable to ping database", func() { 58 mockDB.PingContextReturns(errors.New("ping error")) 59 db.SqlxDB = mockDB 60 61 err := db.PingContext(context.Background()) 62 Expect(err).To(HaveOccurred()) 63 Expect(err.Error()).To(Equal("Failed to ping to SQLite database: ping error")) 64 }) 65 66 It("returns no error if able to ping database", func() { 67 db.SqlxDB = mockDB 68 69 err := db.PingContext(context.Background()) 70 Expect(err).NotTo(HaveOccurred()) 71 }) 72 }) 73 74 Context("creating tables", func() { 75 It("return an error if unable to create users table", func() { 76 mockCreateTx.ExecReturnsOnCall(0, nil, errors.New("creating error")) 77 db.CreateTx = mockCreateTx 78 db.SqlxDB = mockDB 79 err = db.CreateTables() 80 Expect(err).To(HaveOccurred()) 81 Expect(err.Error()).To(ContainSubstring("Error creating users table: creating error")) 82 }) 83 84 It("return an error if unable to create affiliations table", func() { 85 mockCreateTx.ExecReturnsOnCall(1, nil, errors.New("creating error")) 86 db.CreateTx = mockCreateTx 87 db.SqlxDB = mockDB 88 err = db.CreateTables() 89 Expect(err).To(HaveOccurred()) 90 Expect(err.Error()).To(ContainSubstring("Error creating affiliations table: creating error")) 91 }) 92 93 It("return an error if unable to create certificates table", func() { 94 mockCreateTx.ExecReturnsOnCall(2, nil, errors.New("creating error")) 95 db.CreateTx = mockCreateTx 96 db.SqlxDB = mockDB 97 err = db.CreateTables() 98 Expect(err).To(HaveOccurred()) 99 Expect(err.Error()).To(ContainSubstring("Error creating certificates table: creating error")) 100 }) 101 102 It("return an error if unable to create credentials table", func() { 103 mockCreateTx.ExecReturnsOnCall(3, nil, errors.New("creating error")) 104 db.CreateTx = mockCreateTx 105 db.SqlxDB = mockDB 106 err = db.CreateTables() 107 Expect(err).To(HaveOccurred()) 108 Expect(err.Error()).To(ContainSubstring("Error creating credentials table: creating error")) 109 }) 110 111 It("return an error if unable to create revocation_authority_info table", func() { 112 mockCreateTx.ExecReturnsOnCall(4, nil, errors.New("creating error")) 113 db.CreateTx = mockCreateTx 114 db.SqlxDB = mockDB 115 err = db.CreateTables() 116 Expect(err).To(HaveOccurred()) 117 Expect(err.Error()).To(ContainSubstring("Error creating revocation_authority_info table: creating error")) 118 }) 119 120 It("return an error if unable to create nonces table", func() { 121 mockCreateTx.ExecReturnsOnCall(5, nil, errors.New("creating error")) 122 db.CreateTx = mockCreateTx 123 db.SqlxDB = mockDB 124 err = db.CreateTables() 125 Expect(err).To(HaveOccurred()) 126 Expect(err.Error()).To(ContainSubstring("Error creating nonces table: creating error")) 127 }) 128 129 It("return an error if unable to create properties table", func() { 130 mockCreateTx.ExecReturnsOnCall(6, nil, errors.New("creating error")) 131 db.CreateTx = mockCreateTx 132 db.SqlxDB = mockDB 133 err = db.CreateTables() 134 Expect(err).To(HaveOccurred()) 135 Expect(err.Error()).To(ContainSubstring("Error creating properties table: creating error")) 136 }) 137 138 It("return an error if unable to load properties table with data", func() { 139 mockCreateTx.ExecReturnsOnCall(7, nil, errors.New("failed to load data")) 140 db.CreateTx = mockCreateTx 141 db.SqlxDB = mockDB 142 err = db.CreateTables() 143 Expect(err).To(HaveOccurred()) 144 Expect(err.Error()).To(ContainSubstring("Failed to initialize properties table: failed to load data")) 145 }) 146 147 It("creates the fabric ca tables", func() { 148 db.CreateTx = mockCreateTx 149 150 db.SqlxDB = mockDB 151 err = db.CreateTables() 152 Expect(err).NotTo(HaveOccurred()) 153 }) 154 }) 155 })