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  }