github.com/netbound/dex-feed@v0.0.4/exchange/uniswap_v3/pool_test.go (about)

     1  package uniswapv3
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/netbound/dex-feed/token"
     9  
    10  	"github.com/ethereum/go-ethereum/common"
    11  	"github.com/ethereum/go-ethereum/ethclient"
    12  )
    13  
    14  var (
    15  	ethUsdcPool = common.HexToAddress("0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8")
    16  
    17  	token1 = token.NewToken("WETH", wethAddress, 18)
    18  	token0 = token.NewToken("USDC", usdcAddress, 6)
    19  )
    20  
    21  var p, _ = newTestPool()
    22  var client *ethclient.Client
    23  
    24  func newTestPool() (*Pool, error) {
    25  	var err error
    26  
    27  	i := PoolOpts{
    28  		Token0: token0,
    29  		Token1: token1,
    30  		Fee:    fee,
    31  	}
    32  
    33  	rpcApi := "http://localhost:8080/eth"
    34  
    35  	ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
    36  	defer cancel()
    37  
    38  	client, err = ethclient.DialContext(ctx, rpcApi)
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  
    43  	p, err := NewPool(client, "WETHUSDC", ethUsdcPool, i)
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  
    48  	return p, nil
    49  }
    50  
    51  func TestNewPool(t *testing.T) {
    52  	p, err := newTestPool()
    53  	if err != nil {
    54  		t.Fatalf("error creating pool: %s", err)
    55  	}
    56  
    57  	t.Log("new pool name:", p.Name)
    58  }
    59  
    60  func TestUpdateState(t *testing.T) {
    61  	ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
    62  	defer cancel()
    63  
    64  	err := p.UpdateState(ctx, client)
    65  	if err != nil {
    66  		t.Fatalf("error updating state: %s", err)
    67  	}
    68  
    69  	emptyState := PoolState{}
    70  
    71  	if p.State == emptyState {
    72  		t.Fatal("empty state")
    73  	}
    74  
    75  	t.Log("pool state:", p.State)
    76  }
    77  
    78  func TestPriceOf(t *testing.T) {
    79  	price, err := p.PriceOf(token1.Address)
    80  	if err != nil {
    81  		t.Fatalf("error getting price: %s", err)
    82  	}
    83  
    84  	t.Log("price of", token1.Symbol, price)
    85  }
    86  
    87  func BenchmarkPriceOf(b *testing.B) {
    88  	_, err := p.PriceOf(token1.Address)
    89  	if err != nil {
    90  		b.Fatalf("error getting price: %s", err)
    91  	}
    92  }
    93  
    94  func TestEncodeDecodePool(t *testing.T) {
    95  	poolBytes, err := p.Encode()
    96  	if err != nil {
    97  		t.Fatal(err)
    98  	}
    99  
   100  	newPool, err := Decode(poolBytes)
   101  	if err != nil {
   102  		t.Fatal(err)
   103  	}
   104  
   105  	t.Logf("%#v", newPool)
   106  }