github.com/adecaro/fabric-ca@v2.0.0-alpha+incompatible/lib/server/db/migrator_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package db_test
     8  
     9  import (
    10  	"errors"
    11  	"fmt"
    12  
    13  	"github.com/hyperledger/fabric-ca/lib/server/db"
    14  	"github.com/hyperledger/fabric-ca/lib/server/db/mocks"
    15  	"github.com/hyperledger/fabric-ca/lib/server/db/util"
    16  	. "github.com/onsi/ginkgo"
    17  	. "github.com/onsi/gomega"
    18  )
    19  
    20  var _ = Describe("migrator", func() {
    21  	var (
    22  		mockMigrator  *mocks.Migrator
    23  		currentLevels *util.Levels
    24  		srvLevels     *util.Levels
    25  	)
    26  
    27  	BeforeEach(func() {
    28  		mockMigrator = &mocks.Migrator{}
    29  
    30  		currentLevels = &util.Levels{
    31  			Identity:    0,
    32  			Affiliation: 0,
    33  			Certificate: 0,
    34  			Credential:  0,
    35  			Nonce:       0,
    36  			RAInfo:      0,
    37  		}
    38  
    39  		srvLevels = &util.Levels{
    40  			Identity:    1,
    41  			Affiliation: 1,
    42  			Certificate: 1,
    43  			Credential:  1,
    44  			Nonce:       1,
    45  			RAInfo:      1,
    46  		}
    47  	})
    48  
    49  	Context("migrating users table", func() {
    50  		BeforeEach(func() {
    51  			mockMigrator.MigrateUsersTableReturns(errors.New("failed to migrate"))
    52  		})
    53  		It("rolls back transaction if migration fails", func() {
    54  			db.Migrate(mockMigrator, currentLevels, srvLevels)
    55  			Expect(mockMigrator.RollbackCallCount()).To(Equal(1))
    56  		})
    57  
    58  		It("returns an error if rolling back transaction fails", func() {
    59  			mockMigrator.RollbackReturns(errors.New("failed to rollback"))
    60  			err := db.Migrate(mockMigrator, currentLevels, srvLevels)
    61  			Expect(err).To(HaveOccurred())
    62  			Expect(err.Error()).To(Equal("failed to rollback"))
    63  		})
    64  	})
    65  
    66  	Context("migrating affiliations table", func() {
    67  		BeforeEach(func() {
    68  			mockMigrator.MigrateAffiliationsTableReturns(errors.New("failed to migrate"))
    69  		})
    70  		It("rolls back transaction if migration fails", func() {
    71  			db.Migrate(mockMigrator, currentLevels, srvLevels)
    72  			Expect(mockMigrator.RollbackCallCount()).To(Equal(1))
    73  		})
    74  
    75  		It("returns an error if rolling back transaction fails", func() {
    76  			mockMigrator.RollbackReturns(errors.New("failed to rollback"))
    77  			err := db.Migrate(mockMigrator, currentLevels, srvLevels)
    78  			Expect(err).To(HaveOccurred())
    79  			Expect(err.Error()).To(Equal("failed to rollback"))
    80  		})
    81  	})
    82  
    83  	Context("migrating certificates table", func() {
    84  		BeforeEach(func() {
    85  			mockMigrator.MigrateCertificatesTableReturns(errors.New("failed to migrate"))
    86  		})
    87  		It("rolls back transaction if migration fails", func() {
    88  			db.Migrate(mockMigrator, currentLevels, srvLevels)
    89  			Expect(mockMigrator.RollbackCallCount()).To(Equal(1))
    90  		})
    91  
    92  		It("returns an error if rolling back transaction fails", func() {
    93  			mockMigrator.RollbackReturns(errors.New("failed to rollback"))
    94  			err := db.Migrate(mockMigrator, currentLevels, srvLevels)
    95  			Expect(err).To(HaveOccurred())
    96  			Expect(err.Error()).To(Equal("failed to rollback"))
    97  		})
    98  	})
    99  
   100  	Context("migrating credentials table", func() {
   101  		BeforeEach(func() {
   102  			mockMigrator.MigrateCredentialsTableReturns(errors.New("failed to migrate"))
   103  		})
   104  		It("rolls back transaction if migration fails", func() {
   105  			db.Migrate(mockMigrator, currentLevels, srvLevels)
   106  			Expect(mockMigrator.RollbackCallCount()).To(Equal(1))
   107  		})
   108  
   109  		It("returns an error if rolling back transaction fails", func() {
   110  			mockMigrator.RollbackReturns(errors.New("failed to rollback"))
   111  			err := db.Migrate(mockMigrator, currentLevels, srvLevels)
   112  			Expect(err).To(HaveOccurred())
   113  			Expect(err.Error()).To(Equal("failed to rollback"))
   114  		})
   115  	})
   116  
   117  	Context("migrating nonce table", func() {
   118  		BeforeEach(func() {
   119  			mockMigrator.MigrateNoncesTableReturns(errors.New("failed to migrate"))
   120  		})
   121  		It("rolls back transaction if migration fails", func() {
   122  			db.Migrate(mockMigrator, currentLevels, srvLevels)
   123  			Expect(mockMigrator.RollbackCallCount()).To(Equal(1))
   124  		})
   125  
   126  		It("returns an error if rolling back transaction fails", func() {
   127  			mockMigrator.RollbackReturns(errors.New("failed to rollback"))
   128  			err := db.Migrate(mockMigrator, currentLevels, srvLevels)
   129  			Expect(err).To(HaveOccurred())
   130  			Expect(err.Error()).To(Equal("failed to rollback"))
   131  		})
   132  	})
   133  
   134  	Context("migrating rainfo table", func() {
   135  		BeforeEach(func() {
   136  			mockMigrator.MigrateRAInfoTableReturns(errors.New("failed to migrate"))
   137  		})
   138  		It("rolls back transaction if migration fails", func() {
   139  			db.Migrate(mockMigrator, currentLevels, srvLevels)
   140  			Expect(mockMigrator.RollbackCallCount()).To(Equal(1))
   141  		})
   142  
   143  		It("returns an error if rolling back transaction fails", func() {
   144  			mockMigrator.RollbackReturns(errors.New("failed to rollback"))
   145  			err := db.Migrate(mockMigrator, currentLevels, srvLevels)
   146  			Expect(err).To(HaveOccurred())
   147  			Expect(err.Error()).To(Equal("failed to rollback"))
   148  		})
   149  	})
   150  
   151  	It("migrates database to the level of the server", func() {
   152  		err := db.Migrate(mockMigrator, currentLevels, srvLevels)
   153  		fmt.Println("err: ", err)
   154  		Expect(err).NotTo(HaveOccurred())
   155  	})
   156  })