github.com/hellobchain/newcryptosm@v0.0.0-20221019060107-edb949a317e9/tls/credentials/credentials_test.go (about)

     1  package credentials
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/hellobchain/newcryptosm/tls"
     6  	"github.com/hellobchain/newcryptosm/tls/credentials/echo"
     7  	"github.com/hellobchain/newcryptosm/x509"
     8  	"io/ioutil"
     9  	"log"
    10  	"net"
    11  	"testing"
    12  
    13  	"golang.org/x/net/context"
    14  	"google.golang.org/grpc"
    15  )
    16  
    17  const (
    18  	port    = ":50051"
    19  	address = "localhost:50051"
    20  )
    21  
    22  var end chan bool
    23  
    24  type server struct{}
    25  
    26  func (s *server) Echo(ctx context.Context, req *echo.EchoRequest) (*echo.EchoResponse, error) {
    27  	return &echo.EchoResponse{Result: req.Req}, nil
    28  }
    29  
    30  const ca = "testdata/ca.pem"
    31  const cakey = "testdata/cakey.pem"
    32  
    33  const admin = "testdata/admin.pem"
    34  const adminkey = "testdata/adminkey.pem"
    35  
    36  func serverRun() {
    37  	cert, err := tls.LoadX509KeyPair(ca, cakey)
    38  	if err != nil {
    39  		log.Fatal(err)
    40  	}
    41  	certPool := x509.NewCertPool()
    42  	cacert, err := ioutil.ReadFile(ca)
    43  	if err != nil {
    44  		log.Fatal(err)
    45  	}
    46  	certPool.AppendCertsFromPEM(cacert)
    47  
    48  	lis, err := net.Listen("tcp", port)
    49  	if err != nil {
    50  		log.Fatalf("fail to listen: %v", err)
    51  	}
    52  	creds := NewTLS(&tls.Config{
    53  		ClientAuth:   tls.RequireAndVerifyClientCert,
    54  		Certificates: []tls.Certificate{cert},
    55  		ClientCAs:    certPool,
    56  	})
    57  	s := grpc.NewServer(grpc.Creds(creds))
    58  	echo.RegisterEchoServer(s, &server{})
    59  	err = s.Serve(lis)
    60  	if err != nil {
    61  		log.Fatalf("Serve: %v", err)
    62  	}
    63  }
    64  
    65  func clientRun() {
    66  	cert, err := tls.LoadX509KeyPair(admin, adminkey)
    67  	if err != nil {
    68  		log.Fatal(err)
    69  	}
    70  	certPool := x509.NewCertPool()
    71  	cacert, err := ioutil.ReadFile(ca)
    72  	if err != nil {
    73  		log.Fatal(err)
    74  	}
    75  	certPool.AppendCertsFromPEM(cacert)
    76  	creds := NewTLS(&tls.Config{
    77  		ServerName:   "test.example.com",
    78  		Certificates: []tls.Certificate{cert},
    79  		RootCAs:      certPool,
    80  	})
    81  	conn, err := grpc.Dial(address, grpc.WithTransportCredentials(creds))
    82  	if err != nil {
    83  		log.Fatalf("cannot to connect: %v", err)
    84  	}
    85  	defer conn.Close()
    86  	c := echo.NewEchoClient(conn)
    87  	echoTest(c)
    88  	end <- true
    89  }
    90  
    91  func echoTest(c echo.EchoClient) {
    92  	r, err := c.Echo(context.Background(), &echo.EchoRequest{Req: "hello"})
    93  	if err != nil {
    94  		log.Fatalf("failed to echo: %v", err)
    95  	}
    96  	fmt.Printf("%s\n", r.Result)
    97  }
    98  
    99  func Test(t *testing.T) {
   100  	end = make(chan bool, 64)
   101  	go serverRun()
   102  	go clientRun()
   103  	<-end
   104  }