github.com/aeternity/aepp-sdk-go@v1.0.3-0.20190606142815-1c0ffdc21fd9/integration_test/oracle_test.go (about)

     1  package integrationtest
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/aeternity/aepp-sdk-go/aeternity"
     9  	"github.com/aeternity/aepp-sdk-go/generated/models"
    10  	"github.com/aeternity/aepp-sdk-go/utils"
    11  )
    12  
    13  func TestOracleWorkflow(t *testing.T) {
    14  	alice, _ := setupAccounts(t)
    15  	client := setupNetwork(t)
    16  
    17  	oracleAlice := aeternity.Oracle{Client: client, Account: alice}
    18  
    19  	// Register
    20  	queryFee := utils.NewIntFromUint64(1000)
    21  	register, err := oracleAlice.OracleRegisterTx("hello", "helloback", *queryFee, 0, 100, 0, 0)
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  	fmt.Printf("Register %+v\n", register)
    26  	registerHash := signBroadcast(t, &register, alice, client)
    27  	_ = waitForTransaction(client, registerHash)
    28  
    29  	// Confirm that the oracle exists
    30  	oraclePubKey := strings.Replace(alice.Address, "ak_", "ok_", 1)
    31  	var oracle *models.RegisteredOracle
    32  	getOracle := func() {
    33  		oracle, err = client.APIGetOracleByPubkey(oraclePubKey)
    34  		if err != nil {
    35  			t.Fatalf("APIGetOracleByPubkey: %s", err)
    36  		}
    37  	}
    38  	delay(getOracle)
    39  
    40  	// Extend
    41  	// save the oracle's initial TTL so we can compare it with after OracleExtendTx
    42  	oracleTTL := *oracle.TTL
    43  	extend, err := oracleAlice.OracleExtendTx(oraclePubKey, 0, 1000)
    44  	if err != nil {
    45  		t.Fatal(err)
    46  	}
    47  	fmt.Printf("Extend %+v\n", extend)
    48  	extendHash := signBroadcast(t, &extend, alice, client)
    49  	_ = waitForTransaction(client, extendHash)
    50  
    51  	// Confirm that the oracle's TTL changed
    52  	oracle, err = client.APIGetOracleByPubkey(oraclePubKey)
    53  	if err != nil {
    54  		t.Fatalf("APIGetOracleByPubkey: %s", err)
    55  	}
    56  	if *oracle.TTL == oracleTTL {
    57  		t.Fatalf("The Oracle's TTL did not change after OracleExtendTx. Got %v but expected %v", *oracle.TTL, oracleTTL)
    58  	}
    59  
    60  	// Query
    61  	query, err := oracleAlice.OracleQueryTx(oraclePubKey, "How was your day?", *queryFee, 0, 100, 0, 100)
    62  	if err != nil {
    63  		t.Fatal(err)
    64  	}
    65  	fmt.Printf("Query %+v\n", query)
    66  	queryHash := signBroadcast(t, &query, alice, client)
    67  	_ = waitForTransaction(client, queryHash)
    68  
    69  	// Find the Oracle Query ID to reply to
    70  	fmt.Println("Sleeping a bit before querying node for OracleID")
    71  
    72  	var oracleQueries *models.OracleQueries
    73  	getOracleQueries := func() {
    74  		oracleQueries, err = client.APIGetOracleQueriesByPubkey(oraclePubKey)
    75  		if err != nil {
    76  			t.Fatalf("APIGetOracleQueriesByPubkey: %s", err)
    77  		}
    78  	}
    79  	delay(getOracleQueries)
    80  	oqID := string(oracleQueries.OracleQueries[0].ID)
    81  
    82  	// Respond
    83  	respond, err := oracleAlice.OracleRespondTx(oraclePubKey, oqID, "My day was fine thank you", 0, 100)
    84  	fmt.Printf("Respond %+v\n", respond)
    85  	respondHash := signBroadcast(t, &respond, alice, client)
    86  	_ = waitForTransaction(client, respondHash)
    87  }