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, ®ister, 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 }