github.com/wormhole-foundation/wormhole-explorer/common@v0.0.0-20240604151348-09585b5b97c5/client/parser/parser_test.go (about) 1 package parser 2 3 import ( 4 "errors" 5 "io" 6 "net/http" 7 "strings" 8 "testing" 9 "time" 10 11 "go.uber.org/zap" 12 ) 13 14 var timeout int64 = 10 15 16 type RoundTripFunc func(req *http.Request) *http.Response 17 18 // RoundTrip interface implementation. 19 func (r RoundTripFunc) RoundTrip(request *http.Request) (*http.Response, error) { 20 return r(request), nil 21 } 22 23 // NewParserVAAAPITestClient create a 24 func NewParserVAAAPITestClient(rountTripFunc RoundTripFunc) ParserVAAAPIClient { 25 parserVaaClient, _ := NewParserVAAAPIClient(timeout, "", zap.NewExample()) 26 parserVaaClient.Client = http.Client{ 27 Timeout: time.Duration(10) * time.Second, 28 Transport: RoundTripFunc(rountTripFunc), 29 } 30 return parserVaaClient 31 } 32 33 // TestSuccessVAAParser test success vaa parser. 34 func TestSuccessVAAParser(t *testing.T) { 35 parserVaaClient := NewParserVAAAPITestClient(func(request *http.Request) *http.Response { 36 return &http.Response{ 37 StatusCode: http.StatusCreated, 38 Body: io.NopCloser(strings.NewReader(`{"appID": "PORTAL_TOKEN_BRIDGE","chainId": 4, "address": "000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585", "sequence": "226769", "result": {"fee": 0,"type": "Transfer","payloadId": 1,"amount": 10000000,"tokenAddress": "0x000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7","tokenChain": 2,"toAddress": "0x0000000000000000000000000ff664edd699bd85610c2782d9dbbbad704b6fc5","chain": 5}}`)), 39 } 40 }) 41 var chainID uint16 = 4 42 address := "000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585" 43 sequence := "226769" 44 parserVaaResponse, err := parserVaaClient.ParsePayload(chainID, address, sequence, []byte{}) 45 if err != nil { 46 t.Error("expected err zero value, got %w", err) 47 } 48 if parserVaaResponse == nil { 49 t.Error("expected parserVaaResponse value, got nil") 50 } else { 51 if chainID != parserVaaResponse.ChainID { 52 t.Errorf("expected chainID %v, got %v", chainID, parserVaaResponse.ChainID) 53 } 54 if parserVaaResponse.EmitterAddress != address { 55 t.Errorf("expected address %s, got %s", address, parserVaaResponse.EmitterAddress) 56 } 57 if parserVaaResponse.Sequence != sequence { 58 t.Errorf("expected sequence %s, got %s", sequence, parserVaaResponse.Sequence) 59 } 60 } 61 } 62 63 // TestNotFoundVaaParser test vaa parser not found. 64 func TestNotFoundVaaParser(t *testing.T) { 65 parserVaaClient := NewParserVAAAPITestClient(func(request *http.Request) *http.Response { 66 return &http.Response{ 67 StatusCode: http.StatusNotFound, 68 } 69 }) 70 parserVaaResponse, err := parserVaaClient.ParsePayload(4, "000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585", "226769", []byte{}) 71 if err == nil { 72 t.Error("expected error, got nil") 73 } 74 if !errors.Is(err, ErrNotFound) { 75 t.Errorf("expected ErrNotFound, got %s", err.Error()) 76 } 77 if parserVaaResponse != nil { 78 t.Error("expected parserVaaResponse zero value, got %w", parserVaaResponse) 79 } 80 } 81 82 // TestBadRequestVaaParser test vaa parser bad request. 83 func TestBadRequestVaaParser(t *testing.T) { 84 parserVaaClient := NewParserVAAAPITestClient(func(request *http.Request) *http.Response { 85 return &http.Response{ 86 StatusCode: http.StatusBadRequest, 87 } 88 }) 89 parserVaaResponse, err := parserVaaClient.ParsePayload(4, "000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585", "226769", []byte{}) 90 if err == nil { 91 t.Error("expected error, got nil") 92 } 93 if !errors.Is(err, ErrBadRequest) { 94 t.Errorf("expected ErrBadRequest, got %s", err.Error()) 95 } 96 if parserVaaResponse != nil { 97 t.Error("expected parserVaaResponse zero value, got %w", parserVaaResponse) 98 } 99 } 100 101 // TestUnprocessableVaaParser test vaa parser unprocessable request. 102 func TestUnprocessableVaaParser(t *testing.T) { 103 parserVaaClient := NewParserVAAAPITestClient(func(request *http.Request) *http.Response { 104 return &http.Response{ 105 StatusCode: http.StatusUnprocessableEntity, 106 } 107 }) 108 parserVaaResponse, err := parserVaaClient.ParsePayload(4, "000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585", "26769", []byte{}) 109 if err == nil { 110 t.Error("expected error, got nil") 111 } 112 if !errors.Is(err, ErrUnprocessableEntity) { 113 t.Errorf("expected ErrUnprocessableEntity, got %s", err.Error()) 114 } 115 if parserVaaResponse != nil { 116 t.Error("expected parserVaaResponse zero value, got %w", parserVaaResponse) 117 } 118 } 119 120 // TestInternalErrorVaaParser test vaa parser internal error request. 121 func TestInternalErrorVaaParser(t *testing.T) { 122 parserVaaClient := NewParserVAAAPITestClient(func(request *http.Request) *http.Response { 123 return &http.Response{ 124 StatusCode: http.StatusInternalServerError, 125 } 126 }) 127 parserVaaResponse, err := parserVaaClient.ParsePayload(4, "000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585", "226769", []byte{}) 128 if err == nil { 129 t.Error("expected error, got nil") 130 } 131 if !errors.Is(err, ErrInternalError) { 132 t.Errorf("expected ErrInternalError, got %s", err.Error()) 133 } 134 if parserVaaResponse != nil { 135 t.Error("expected parserVaaResponse zero value, got %w", parserVaaResponse) 136 } 137 }