github.com/extrame/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  })