github.com/s7techlab/cckit@v0.10.5/examples/cpaper_asservice/bin/api/mock/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"io/ioutil"
     6  	"log"
     7  	"net"
     8  	"net/http"
     9  	"time"
    10  
    11  	"github.com/grpc-ecosystem/grpc-gateway/runtime"
    12  	"google.golang.org/grpc"
    13  
    14  	"github.com/s7techlab/cckit/examples/cpaper_asservice"
    15  	"github.com/s7techlab/cckit/gateway"
    16  	"github.com/s7techlab/cckit/testing"
    17  )
    18  
    19  const (
    20  	chaincodeName = `cpaper`
    21  	channelName   = `cpaper`
    22  
    23  	grpcAddress = `:8080`
    24  	restAddress = `:8081`
    25  )
    26  
    27  func main() {
    28  	ctx := context.Background()
    29  	ctx, cancel := context.WithCancel(ctx)
    30  	defer cancel()
    31  
    32  	// Create mock for commercial paper chaincode invocation
    33  
    34  	// Commercial paper chaincode instance
    35  	cc, err := cpaper_asservice.NewCC()
    36  	if err != nil {
    37  		log.Fatalln(err)
    38  	}
    39  
    40  	// Mockstub for commercial paper
    41  	cpaperMock := testing.NewMockStub(chaincodeName, cc)
    42  
    43  	// default identity for signing requests to peeer (mocked)
    44  	apiIdentity, err := testing.IdentityFromFile(`MSP`, `../../../testdata/admin.pem`, ioutil.ReadFile)
    45  	if err != nil {
    46  		log.Fatalln(err)
    47  	}
    48  	// Generated gateway for access to chaincode from external application
    49  	cpaperGateway := cpaper_asservice.NewCPaperServiceGateway(
    50  		// Chaincode invocation service mock. For real network you can use example with hlf-sdk-go
    51  		testing.NewPeer().WithChannel(channelName, cpaperMock),
    52  		channelName,
    53  		chaincodeName,
    54  		gateway.WithDefaultSigner(apiIdentity))
    55  
    56  	grpcListener, err := net.Listen("tcp", grpcAddress)
    57  	if err != nil {
    58  		log.Fatalf("failed to listen grpc: %v", err)
    59  	}
    60  
    61  	// Create gRPC server
    62  	s := grpc.NewServer()
    63  	cpaper_asservice.RegisterCPaperServiceServer(s, cpaperGateway)
    64  
    65  	// Runs gRPC server in goroutine
    66  	go func() {
    67  		log.Printf(`listen gRPC at %s`, grpcAddress)
    68  		if err := s.Serve(grpcListener); err != nil {
    69  			log.Fatalf("failed to serve gRPC: %v", err)
    70  		}
    71  	}()
    72  
    73  	// wait for gRPC service stared
    74  	time.Sleep(3 * time.Second)
    75  
    76  	// Register gRPC server endpoint
    77  	mux := runtime.NewServeMux()
    78  	opts := []grpc.DialOption{grpc.WithInsecure()}
    79  	err = cpaper_asservice.RegisterCPaperServiceHandlerFromEndpoint(ctx, mux, grpcAddress, opts)
    80  	if err != nil {
    81  		log.Fatalf("failed to register handler from endpoint %v", err)
    82  	}
    83  
    84  	log.Printf(`listen REST at %s`, restAddress)
    85  
    86  	// Start HTTP server (and proxy calls to gRPC server endpoint)
    87  	if err = http.ListenAndServe(restAddress, mux); err != nil {
    88  		log.Fatalf("failed to serve REST: %v", err)
    89  	}
    90  }