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