github.com/adecaro/fabric-ca@v2.0.0-alpha+incompatible/lib/server/db/tx_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  	"testing"
    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/common/metrics/disabled"
    16  	"github.com/jmoiron/sqlx"
    17  	. "github.com/onsi/gomega"
    18  )
    19  
    20  func TestTX(t *testing.T) {
    21  	gt := NewGomegaWithT(t)
    22  
    23  	mockDB := &mocks.SqlxDB{}
    24  	fabDB := db.New(mockDB, "", &disabled.Provider{})
    25  	mockTX := &mocks.SqlxTx{}
    26  	fabTx := &db.TX{
    27  		TX:     mockTX,
    28  		Record: fabDB,
    29  	}
    30  	gt.Expect(fabTx).NotTo(BeNil())
    31  
    32  	// Select
    33  	mockTX.SelectReturns(nil)
    34  	err := fabTx.Select("", nil, "")
    35  	gt.Expect(err).NotTo(HaveOccurred())
    36  
    37  	mockTX.SelectReturns(errors.New("Select Error"))
    38  	err = fabTx.Select("", nil, "")
    39  	gt.Expect(err).To(HaveOccurred())
    40  	gt.Expect(err.Error()).To(Equal("Select Error"))
    41  
    42  	// Exec
    43  	mockResult := &mocks.Result{}
    44  	mockResult.On("RowsAffected").Return(int64(2), nil)
    45  	mockTX.ExecReturns(mockResult, nil)
    46  	res, err := fabTx.Exec("", "")
    47  	gt.Expect(err).NotTo(HaveOccurred())
    48  
    49  	rows, err := res.RowsAffected()
    50  	gt.Expect(err).NotTo(HaveOccurred())
    51  	gt.Expect(rows).To(Equal(int64(2)))
    52  
    53  	mockTX.ExecReturns(nil, errors.New("Exec Error"))
    54  	res, err = fabTx.Exec("", "")
    55  	gt.Expect(err).To(HaveOccurred())
    56  	gt.Expect(err.Error()).To(Equal("Exec Error"))
    57  
    58  	// Get
    59  	mockTX.GetReturns(nil)
    60  	err = fabTx.Get("", nil, "")
    61  	gt.Expect(err).NotTo(HaveOccurred())
    62  
    63  	mockTX.GetReturns(errors.New("Get Error"))
    64  	err = fabTx.Get("", nil, "")
    65  	gt.Expect(err.Error()).To(Equal("Get Error"))
    66  
    67  	// Queryx
    68  	mockTX.QueryxReturns(&sqlx.Rows{}, nil)
    69  	r, err := fabTx.Queryx("", "")
    70  	gt.Expect(err).NotTo(HaveOccurred())
    71  	gt.Expect(r).NotTo(BeNil())
    72  
    73  	mockTX.QueryxReturns(nil, errors.New("Queryx Error"))
    74  	_, err = fabTx.Queryx("", "")
    75  	gt.Expect(err.Error()).To(Equal("Queryx Error"))
    76  
    77  	// Rebind
    78  	mockTX.RebindReturns("Select * from")
    79  	query := fabTx.Rebind("")
    80  	gt.Expect(query).To(Equal("Select * from"))
    81  
    82  	// Commit
    83  	mockTX.CommitReturns(nil)
    84  	err = fabTx.Commit("")
    85  	gt.Expect(err).NotTo(HaveOccurred())
    86  
    87  	mockTX.CommitReturns(errors.New("commit error"))
    88  	err = fabTx.Commit("")
    89  	gt.Expect(err).To(HaveOccurred())
    90  	gt.Expect(err.Error()).To(Equal("commit error"))
    91  
    92  	// Rollback
    93  	mockTX.RollbackReturns(nil)
    94  	err = fabTx.Rollback("")
    95  	gt.Expect(err).NotTo(HaveOccurred())
    96  
    97  	mockTX.RollbackReturns(errors.New("rollback error"))
    98  	err = fabTx.Rollback("")
    99  	gt.Expect(err).To(HaveOccurred())
   100  	gt.Expect(err.Error()).To(Equal("rollback error"))
   101  }