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