github.com/darrenli6/fabric-sdk-example@v0.0.0-20220109053535-94b13b56df8c/peer/channel/join_test.go (about)

     1  /*
     2   Copyright Digital Asset Holdings, LLC 2017 All Rights Reserved.
     3  
     4   Licensed under the Apache License, Version 2.0 (the "License");
     5   you may not use this file except in compliance with the License.
     6   You may obtain a copy of the License at
     7  
     8        http://www.apache.org/licenses/LICENSE-2.0
     9  
    10   Unless required by applicable law or agreed to in writing, software
    11   distributed under the License is distributed on an "AS IS" BASIS,
    12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   See the License for the specific language governing permissions and
    14   limitations under the License.
    15  */
    16  
    17  package channel
    18  
    19  import (
    20  	"io/ioutil"
    21  	"os"
    22  	"path/filepath"
    23  	"testing"
    24  
    25  	"github.com/hyperledger/fabric/peer/common"
    26  	pb "github.com/hyperledger/fabric/protos/peer"
    27  	"github.com/stretchr/testify/assert"
    28  )
    29  
    30  func TestMissingBlockFile(t *testing.T) {
    31  	resetFlags()
    32  
    33  	cmd := joinCmd(nil)
    34  	AddFlags(cmd)
    35  	args := []string{}
    36  	cmd.SetArgs(args)
    37  
    38  	assert.Error(t, cmd.Execute(), "expected join command to fail due to missing blockfilepath")
    39  }
    40  
    41  func TestJoin(t *testing.T) {
    42  	InitMSP()
    43  	resetFlags()
    44  
    45  	dir, err := ioutil.TempDir("/tmp", "jointest")
    46  	assert.NoError(t, err, "Could not create the directory %s", dir)
    47  	mockblockfile := filepath.Join(dir, "mockjointest.block")
    48  	err = ioutil.WriteFile(mockblockfile, []byte(""), 0644)
    49  	assert.NoError(t, err, "Could not write to the file %s", mockblockfile)
    50  	defer os.RemoveAll(dir)
    51  	signer, err := common.GetDefaultSigner()
    52  	assert.NoError(t, err, "Get default signer error: %v", err)
    53  
    54  	mockResponse := &pb.ProposalResponse{
    55  		Response:    &pb.Response{Status: 200},
    56  		Endorsement: &pb.Endorsement{},
    57  	}
    58  
    59  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
    60  
    61  	mockCF := &ChannelCmdFactory{
    62  		EndorserClient:   mockEndorerClient,
    63  		BroadcastFactory: mockBroadcastClientFactory,
    64  		Signer:           signer,
    65  	}
    66  
    67  	cmd := joinCmd(mockCF)
    68  	AddFlags(cmd)
    69  
    70  	args := []string{"-b", mockblockfile}
    71  	cmd.SetArgs(args)
    72  
    73  	assert.NoError(t, cmd.Execute(), "expected join command to succeed")
    74  }
    75  
    76  func TestJoinNonExistentBlock(t *testing.T) {
    77  	InitMSP()
    78  	resetFlags()
    79  
    80  	signer, err := common.GetDefaultSigner()
    81  	if err != nil {
    82  		t.Fatalf("Get default signer error: %v", err)
    83  	}
    84  
    85  	mockResponse := &pb.ProposalResponse{
    86  		Response:    &pb.Response{Status: 200},
    87  		Endorsement: &pb.Endorsement{},
    88  	}
    89  
    90  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
    91  
    92  	mockCF := &ChannelCmdFactory{
    93  		EndorserClient:   mockEndorerClient,
    94  		BroadcastFactory: mockBroadcastClientFactory,
    95  		Signer:           signer,
    96  	}
    97  
    98  	cmd := joinCmd(mockCF)
    99  
   100  	AddFlags(cmd)
   101  
   102  	args := []string{"-b", "mockchain.block"}
   103  	cmd.SetArgs(args)
   104  
   105  	err = cmd.Execute()
   106  	assert.Error(t, err, "expected join command to fail")
   107  	assert.IsType(t, GBFileNotFoundErr(err.Error()), err, "expected error type of GBFileNotFoundErr")
   108  }
   109  
   110  func TestBadProposalResponse(t *testing.T) {
   111  	InitMSP()
   112  	resetFlags()
   113  
   114  	mockblockfile := "/tmp/mockjointest.block"
   115  	ioutil.WriteFile(mockblockfile, []byte(""), 0644)
   116  	defer os.Remove(mockblockfile)
   117  	signer, err := common.GetDefaultSigner()
   118  	assert.NoError(t, err, "Get default signer error: %v", err)
   119  
   120  	mockResponse := &pb.ProposalResponse{
   121  		Response:    &pb.Response{Status: 500},
   122  		Endorsement: &pb.Endorsement{},
   123  	}
   124  
   125  	mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
   126  
   127  	mockCF := &ChannelCmdFactory{
   128  		EndorserClient:   mockEndorerClient,
   129  		BroadcastFactory: mockBroadcastClientFactory,
   130  		Signer:           signer,
   131  	}
   132  
   133  	cmd := joinCmd(mockCF)
   134  
   135  	AddFlags(cmd)
   136  
   137  	args := []string{"-b", mockblockfile}
   138  	cmd.SetArgs(args)
   139  
   140  	err = cmd.Execute()
   141  	assert.Error(t, err, "expected join command to fail")
   142  	assert.IsType(t, ProposalFailedErr(err.Error()), err, "expected error type of ProposalFailedErr")
   143  }
   144  func TestJoinNilCF(t *testing.T) {
   145  	InitMSP()
   146  	resetFlags()
   147  
   148  	dir, err := ioutil.TempDir("/tmp", "jointest")
   149  	assert.NoError(t, err, "Could not create the directory %s", dir)
   150  	mockblockfile := filepath.Join(dir, "mockjointest.block")
   151  	defer os.RemoveAll(dir)
   152  	cmd := joinCmd(nil)
   153  	AddFlags(cmd)
   154  	args := []string{"-b", mockblockfile}
   155  	cmd.SetArgs(args)
   156  
   157  	err = cmd.Execute()
   158  	assert.Error(t, err)
   159  	assert.Contains(t, err.Error(), "Error trying to connect to local peer")
   160  }