github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/cmd/configtxgen/main_test.go (about) 1 /* 2 Copyright hechain. 2017 All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package main 8 9 import ( 10 "flag" 11 "fmt" 12 "io/ioutil" 13 "os" 14 "path/filepath" 15 "testing" 16 17 "github.com/hechain20/hechain/bccsp/factory" 18 "github.com/hechain20/hechain/core/config/configtest" 19 "github.com/hechain20/hechain/internal/configtxgen/genesisconfig" 20 "github.com/stretchr/testify/require" 21 ) 22 23 var tmpDir string 24 25 func TestMain(m *testing.M) { 26 dir, err := ioutil.TempDir("", "configtxgen") 27 if err != nil { 28 panic("Error creating temp dir") 29 } 30 tmpDir = dir 31 testResult := m.Run() 32 os.RemoveAll(dir) 33 34 os.Exit(testResult) 35 } 36 37 func TestInspectMissing(t *testing.T) { 38 require.EqualError(t, doInspectBlock("NonSenseBlockFileThatDoesn'tActuallyExist"), "could not read block NonSenseBlockFileThatDoesn'tActuallyExist") 39 } 40 41 func TestInspectBlock(t *testing.T) { 42 blockDest := filepath.Join(tmpDir, "block") 43 44 config := genesisconfig.Load(genesisconfig.SampleInsecureSoloProfile, configtest.GetDevConfigDir()) 45 46 require.NoError(t, doOutputBlock(config, "foo", blockDest), "Good block generation request") 47 require.NoError(t, doInspectBlock(blockDest), "Good block inspection request") 48 } 49 50 func TestInspectBlockErr(t *testing.T) { 51 config := genesisconfig.Load(genesisconfig.SampleInsecureSoloProfile, configtest.GetDevConfigDir()) 52 53 require.EqualError(t, doOutputBlock(config, "foo", ""), "error writing genesis block: open : no such file or directory") 54 require.EqualError(t, doInspectBlock(""), "could not read block ") 55 } 56 57 func TestMissingOrdererSection(t *testing.T) { 58 blockDest := filepath.Join(tmpDir, "block") 59 60 config := genesisconfig.Load(genesisconfig.SampleInsecureSoloProfile, configtest.GetDevConfigDir()) 61 config.Orderer = nil 62 63 require.EqualError(t, doOutputBlock(config, "foo", blockDest), "refusing to generate block which is missing orderer section") 64 } 65 66 func TestApplicationChannelGenesisBlock(t *testing.T) { 67 blockDest := filepath.Join(tmpDir, "block") 68 69 config := genesisconfig.Load(genesisconfig.SampleAppChannelInsecureSoloProfile, configtest.GetDevConfigDir()) 70 71 require.NoError(t, doOutputBlock(config, "foo", blockDest)) 72 } 73 74 func TestApplicationChannelMissingApplicationSection(t *testing.T) { 75 blockDest := filepath.Join(tmpDir, "block") 76 77 config := genesisconfig.Load(genesisconfig.SampleAppChannelInsecureSoloProfile, configtest.GetDevConfigDir()) 78 config.Application = nil 79 80 require.EqualError(t, doOutputBlock(config, "foo", blockDest), "refusing to generate application channel block which is missing application section") 81 } 82 83 func TestMissingConsortiumValue(t *testing.T) { 84 configTxDest := filepath.Join(tmpDir, "configtx") 85 86 config := genesisconfig.Load(genesisconfig.SampleSingleMSPChannelProfile, configtest.GetDevConfigDir()) 87 config.Consortium = "" 88 89 require.EqualError(t, doOutputChannelCreateTx(config, nil, "foo", configTxDest), "config update generation failure: cannot define a new channel with no Consortium value") 90 } 91 92 func TestUnsuccessfulChannelTxFileCreation(t *testing.T) { 93 configTxDest := filepath.Join(tmpDir, "configtx") 94 95 config := genesisconfig.Load(genesisconfig.SampleSingleMSPChannelProfile, configtest.GetDevConfigDir()) 96 require.NoError(t, ioutil.WriteFile(configTxDest, []byte{}, 0o440)) 97 defer os.Remove(configTxDest) 98 99 require.EqualError(t, doOutputChannelCreateTx(config, nil, "foo", configTxDest), fmt.Sprintf("error writing channel create tx: open %s: permission denied", configTxDest)) 100 } 101 102 func TestMissingApplicationValue(t *testing.T) { 103 configTxDest := filepath.Join(tmpDir, "configtx") 104 105 config := genesisconfig.Load(genesisconfig.SampleSingleMSPChannelProfile, configtest.GetDevConfigDir()) 106 config.Application = nil 107 108 require.EqualError(t, doOutputChannelCreateTx(config, nil, "foo", configTxDest), "could not generate default config template: channel template configs must contain an application section") 109 } 110 111 func TestInspectMissingConfigTx(t *testing.T) { 112 require.EqualError(t, doInspectChannelCreateTx("ChannelCreateTxFileWhichDoesn'tReallyExist"), "could not read channel create tx: open ChannelCreateTxFileWhichDoesn'tReallyExist: no such file or directory") 113 } 114 115 func TestInspectConfigTx(t *testing.T) { 116 configTxDest := filepath.Join(tmpDir, "configtx") 117 118 config := genesisconfig.Load(genesisconfig.SampleSingleMSPChannelProfile, configtest.GetDevConfigDir()) 119 120 require.NoError(t, doOutputChannelCreateTx(config, nil, "foo", configTxDest), "Good outputChannelCreateTx generation request") 121 require.NoError(t, doInspectChannelCreateTx(configTxDest), "Good configtx inspection request") 122 } 123 124 func TestGenerateAnchorPeersUpdate(t *testing.T) { 125 configTxDest := filepath.Join(tmpDir, "anchorPeerUpdate") 126 127 config := genesisconfig.Load(genesisconfig.SampleSingleMSPChannelProfile, configtest.GetDevConfigDir()) 128 129 require.NoError(t, doOutputAnchorPeersUpdate(config, "foo", configTxDest, genesisconfig.SampleOrgName), "Good anchorPeerUpdate request") 130 } 131 132 func TestBadAnchorPeersUpdates(t *testing.T) { 133 configTxDest := filepath.Join(tmpDir, "anchorPeerUpdate") 134 135 config := genesisconfig.Load(genesisconfig.SampleSingleMSPChannelProfile, configtest.GetDevConfigDir()) 136 137 require.EqualError(t, doOutputAnchorPeersUpdate(config, "foo", configTxDest, ""), "must specify an organization to update the anchor peer for") 138 139 backupApplication := config.Application 140 config.Application = nil 141 require.EqualError(t, doOutputAnchorPeersUpdate(config, "foo", configTxDest, genesisconfig.SampleOrgName), "cannot update anchor peers without an application section") 142 config.Application = backupApplication 143 144 config.Application.Organizations[0] = &genesisconfig.Organization{Name: "FakeOrg", ID: "FakeOrg"} 145 require.EqualError(t, doOutputAnchorPeersUpdate(config, "foo", configTxDest, genesisconfig.SampleOrgName), "error parsing profile as channel group: could not create application group: failed to create application org: 1 - Error loading MSP configuration for org FakeOrg: unknown MSP type ''") 146 } 147 148 func TestConfigTxFlags(t *testing.T) { 149 configTxDest := filepath.Join(tmpDir, "configtx") 150 configTxDestAnchorPeers := filepath.Join(tmpDir, "configtxAnchorPeers") 151 152 oldArgs := os.Args 153 defer func() { 154 os.Args = oldArgs 155 flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) 156 }() 157 158 cleanup := configtest.SetDevFabricConfigPath(t) 159 defer cleanup() 160 devConfigDir := configtest.GetDevConfigDir() 161 162 os.Args = []string{ 163 "cmd", 164 "-channelID=testchannelid", 165 "-outputCreateChannelTx=" + configTxDest, 166 "-channelCreateTxBaseProfile=" + genesisconfig.SampleSingleMSPSoloProfile, 167 "-profile=" + genesisconfig.SampleSingleMSPChannelProfile, 168 "-configPath=" + devConfigDir, 169 "-inspectChannelCreateTx=" + configTxDest, 170 "-outputAnchorPeersUpdate=" + configTxDestAnchorPeers, 171 "-asOrg=" + genesisconfig.SampleOrgName, 172 } 173 174 main() 175 176 _, err := os.Stat(configTxDest) 177 require.NoError(t, err, "Configtx file is written successfully") 178 _, err = os.Stat(configTxDestAnchorPeers) 179 require.NoError(t, err, "Configtx anchor peers file is written successfully") 180 } 181 182 func TestBlockFlags(t *testing.T) { 183 blockDest := filepath.Join(tmpDir, "block") 184 oldArgs := os.Args 185 defer func() { 186 os.Args = oldArgs 187 flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) 188 }() 189 os.Args = []string{ 190 "cmd", 191 "-channelID=testchannelid", 192 "-profile=" + genesisconfig.SampleSingleMSPSoloProfile, 193 "-outputBlock=" + blockDest, 194 "-inspectBlock=" + blockDest, 195 } 196 cleanup := configtest.SetDevFabricConfigPath(t) 197 defer cleanup() 198 199 main() 200 201 _, err := os.Stat(blockDest) 202 require.NoError(t, err, "Block file is written successfully") 203 } 204 205 func TestPrintOrg(t *testing.T) { 206 factory.InitFactories(nil) 207 config := genesisconfig.LoadTopLevel(configtest.GetDevConfigDir()) 208 209 require.NoError(t, doPrintOrg(config, genesisconfig.SampleOrgName), "Good org to print") 210 211 err := doPrintOrg(config, genesisconfig.SampleOrgName+".wrong") 212 require.Error(t, err, "Bad org name") 213 require.Regexp(t, "organization [^ ]* not found", err.Error()) 214 215 config.Organizations[0] = &genesisconfig.Organization{Name: "FakeOrg", ID: "FakeOrg"} 216 err = doPrintOrg(config, "FakeOrg") 217 require.Error(t, err, "Fake org") 218 require.Regexp(t, "bad org definition", err.Error()) 219 }