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  })