func TestServerOpenchain_API_GetBlockByNumber(t *testing.T) { // Construct a ledger with 0 blocks. ledger.InitTestLedger(t) // Initialize the OpenchainServer object. server, err := NewOpenchainServer() if err != nil { t.Logf("Error creating OpenchainServer: %s", err) t.Fail() } // Attempt to retrieve the 0th block from the blockchain. There are no blocks // in this blockchain, therefore this test should intentionally fail. block, err := server.GetBlockByNumber(context.Background(), &protos.BlockNumber{Number: 0}) if err != nil { // Success t.Logf("Error retrieving Block from blockchain: %s", err) } else { // Failure t.Logf("Attempting to retrieve from empty blockchain: %v", block) t.Fail() } // Construct a ledger with 3 blocks. ledger1 := ledger.InitTestLedger(t) buildTestLedger1(ledger1, t) server.ledger = ledger1 // Retrieve the 0th block from the blockchain. block, err = server.GetBlockByNumber(context.Background(), &protos.BlockNumber{Number: 0}) if err != nil { t.Logf("Error retrieving Block from blockchain: %s", err) t.Fail() } else { t.Logf("Block #0: %v", block) } // Retrieve the 3rd block from the blockchain, blocks are numbered starting // from 0. block, err = server.GetBlockByNumber(context.Background(), &protos.BlockNumber{Number: 2}) if err != nil { t.Logf("Error retrieving Block from blockchain: %s", err) t.Fail() } else { t.Logf("Block #2: %v", block) } // Retrieve the 5th block from the blockchain. There are only 3 blocks in this // blockchain, therefore this test should intentionally fail. block, err = server.GetBlockByNumber(context.Background(), &protos.BlockNumber{Number: 4}) if err != nil { // Success. t.Logf("Error retrieving Block from blockchain: %s", err) } else { // Failure t.Logf("Trying to retrieve non-existent block from blockchain: %v", block) t.Fail() } }
func TestServerOpenchain_API_GetBlockCount(t *testing.T) { // Must initialize the ledger singleton before initializing the // OpenchainServer, as it needs that pointer. // Construct a ledger with 0 blocks. ledger := ledger.InitTestLedger(t) // Initialize the OpenchainServer object. server, err := NewOpenchainServer() if err != nil { t.Logf("Error creating OpenchainServer: %s", err) t.Fail() } // Retrieve the current number of blocks in the blockchain. There are no blocks // in this blockchain, therefore this test should intentionally fail. count, err := server.GetBlockCount(context.Background(), &google_protobuf.Empty{}) if err != nil { // Success t.Logf("Error retrieving BlockCount from blockchain: %s", err) } else { // Failure t.Logf("Attempting to query an empty blockchain: %v", count.Count) t.Fail() } // Add three 3 blocks to ledger. buildTestLedger1(ledger, t) // Retrieve the current number of blocks in the blockchain. Must be 3. count, err = server.GetBlockCount(context.Background(), &google_protobuf.Empty{}) if err != nil { t.Logf("Error retrieving BlockCount from blockchain: %s", err) t.Fail() } else if count.Count != 3 { t.Logf("Error! Blockchain must have 3 blocks!") t.Fail() } else { t.Logf("Current BlockCount: %v", count.Count) } // Add 5 more blocks to ledger. buildTestLedger2(ledger, t) // Retrieve the current number of blocks in the blockchain. Must be 5. count, err = server.GetBlockCount(context.Background(), &google_protobuf.Empty{}) if err != nil { t.Logf("Error retrieving BlockCount from blockchain: %s", err) t.Fail() } else if count.Count != 8 { t.Logf("Error! Blockchain must have 8 blocks!") t.Fail() } else { t.Logf("Current BlockCount: %v", count.Count) } }
func TestGenesis(t *testing.T) { //use a different address than what we usually use for "peer" //we override the peerAddress set in chaincode_support.go peerAddress := "0.0.0.0:50303" lis, err := net.Listen("tcp", peerAddress) if err != nil { t.Fail() t.Logf("Error starting peer listener %s", err) return } var opts []grpc.ServerOption if viper.GetBool("peer.tls.enabled") { creds, err := credentials.NewServerTLSFromFile(viper.GetString("peer.tls.cert.file"), viper.GetString("peer.tls.key.file")) if err != nil { grpclog.Fatalf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } grpcServer := grpc.NewServer(opts...) getPeerEndpoint := func() (*protos.PeerEndpoint, error) { return &protos.PeerEndpoint{ID: &protos.PeerID{Name: "testpeer"}, Address: peerAddress}, nil } ccStartupTimeout := time.Duration(30000) * time.Millisecond protos.RegisterChaincodeSupportServer(grpcServer, chaincode.NewChaincodeSupport(chaincode.DefaultChain, getPeerEndpoint, false, ccStartupTimeout, nil)) go grpcServer.Serve(lis) ledger := ledger.InitTestLedger(t) if ledger.GetBlockchainSize() != 0 { t.Fatalf("Expected blockchain size of 0, but got %d", ledger.GetBlockchainSize()) } makeGenesisErr := MakeGenesis() if makeGenesisErr != nil { t.Fatalf("Error creating genesis block, %s", makeGenesisErr) } if ledger.GetBlockchainSize() != 1 { t.Fatalf("Expected blockchain size of 1, but got %d", ledger.GetBlockchainSize()) } }
func TestServerOpenchain_API_GetBlockchainInfo(t *testing.T) { // Construct a ledger with 0 blocks. ledger := ledger.InitTestLedger(t) // Initialize the OpenchainServer object. server, err := NewOpenchainServer() if err != nil { t.Logf("Error creating OpenchainServer: %s", err) t.Fail() } // Attempt to retrieve the blockchain info. There are no blocks // in this blockchain, therefore this test should intentionally fail. info, err := server.GetBlockchainInfo(context.Background(), &google_protobuf.Empty{}) if err != nil { // Success t.Logf("Error retrieving blockchain info: %s", err) } else { // Failure t.Logf("Error attempting to retrive info from emptry blockchain: %v", info) t.Fail() } // add 3 blocks to ledger. buildTestLedger1(ledger, t) // Attempt to retrieve the blockchain info. info, err = server.GetBlockchainInfo(context.Background(), &google_protobuf.Empty{}) if err != nil { t.Logf("Error retrieving blockchain info: %s", err) t.Fail() } else { t.Logf("Blockchain 1 info: %v", info) } // add 5 blocks more. buildTestLedger2(ledger, t) // Attempt to retrieve the blockchain info. info, err = server.GetBlockchainInfo(context.Background(), &google_protobuf.Empty{}) if err != nil { t.Logf("Error retrieving blockchain info: %s", err) t.Fail() } else { t.Logf("Blockchain 2 info: %v", info) } }
func TestServerOpenchain_API_GetState(t *testing.T) { ledger1 := ledger.InitTestLedger(t) // Construct a blockchain with 3 blocks. buildTestLedger1(ledger1, t) // Initialize the OpenchainServer object. server, err := NewOpenchainServer() if err != nil { t.Logf("Error creating OpenchainServer: %s", err) t.Fail() } // Retrieve the current number of blocks in the blockchain. Must be 3. val, stateErr := server.GetState(context.Background(), "MyContract1", "code") if stateErr != nil { t.Fatalf("Error retrieving state: %s", stateErr) } else if bytes.Compare(val, []byte("code example")) != 0 { t.Fatalf("Expected %s, but got %s", []byte("code example"), val) } }