mirror of
https://github.com/FlipsideCrypto/flip-rpc-client-go.git
synced 2026-02-06 02:46:44 +00:00
325 lines
7.2 KiB
Go
325 lines
7.2 KiB
Go
package flip
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/FlipsideCrypto/flip-rpc-client-go/dynamicquery"
|
|
"github.com/FlipsideCrypto/flip-rpc-client-go/segment"
|
|
)
|
|
|
|
func makeCondition() segment.Condition {
|
|
gte := segment.Gte{
|
|
PartitionID: "sorted_set:ad43bf8e-0f0c-4102-be91-52bc84150af2:current_balances:flipside",
|
|
Value: 100000000,
|
|
}
|
|
c := segment.Condition{
|
|
Gte: >e,
|
|
}
|
|
return c
|
|
}
|
|
|
|
func makeQuery(condition segment.Condition) dynamicquery.Query {
|
|
segments := make(map[string]segment.Condition)
|
|
segments["large_balance_holder"] = condition
|
|
|
|
aggregates := make([]dynamicquery.Aggregate, 0)
|
|
aggregates = append(aggregates, dynamicquery.Aggregate{
|
|
Field: "event_amount",
|
|
Label: "total_amount",
|
|
DecimalAdjustment: 16,
|
|
Operation: "sum",
|
|
})
|
|
|
|
groupBy := make([]dynamicquery.GroupBy, 0)
|
|
groupBy = append(groupBy, dynamicquery.GroupBy{
|
|
Field: "block_timestamp",
|
|
Timebucket: "1 day",
|
|
Label: "metric_date",
|
|
})
|
|
|
|
inSegment := dynamicquery.InSegment{
|
|
Field: "event_to",
|
|
Value: "large_balance_holder",
|
|
}
|
|
filter := dynamicquery.Filter{
|
|
InSegment: &inSegment,
|
|
}
|
|
|
|
query := dynamicquery.Query{
|
|
Table: "udm_events_aion",
|
|
Schema: "source",
|
|
Filter: &filter,
|
|
GroupBy: groupBy,
|
|
Aggregates: aggregates,
|
|
Segments: segments,
|
|
}
|
|
return query
|
|
}
|
|
|
|
func makeWindowingQuery() dynamicquery.Query {
|
|
|
|
aggregates := make([]dynamicquery.Aggregate, 0)
|
|
aggregates = append(aggregates, dynamicquery.Aggregate{
|
|
Field: "price",
|
|
Label: "current_price",
|
|
Operation: "avg",
|
|
})
|
|
|
|
groupBy := make([]dynamicquery.GroupBy, 0)
|
|
groupBy = append(groupBy, dynamicquery.GroupBy{
|
|
Field: "market_id",
|
|
Label: "market_id",
|
|
})
|
|
|
|
orderBy := make([]dynamicquery.OrderBy, 0)
|
|
orderBy = append(orderBy, dynamicquery.OrderBy{
|
|
Label: "market_id",
|
|
Direction: "DESC",
|
|
})
|
|
|
|
latest := dynamicquery.Latest{
|
|
PartitionBy: []string{"project_id", "oracle_id", "market_id"},
|
|
OrderBy: "block_timestamp",
|
|
}
|
|
|
|
query := dynamicquery.Query{
|
|
Table: "udm_price_feeds",
|
|
Schema: "source",
|
|
GroupBy: groupBy,
|
|
Aggregates: aggregates,
|
|
OrderBy: orderBy,
|
|
Latest: &latest,
|
|
}
|
|
return query
|
|
}
|
|
|
|
func makeFieldsQuery() dynamicquery.Query {
|
|
|
|
fields := make([]dynamicquery.Field, 0)
|
|
fields = append(fields, dynamicquery.Field{
|
|
Label: "tx_id",
|
|
Field: "tx_id",
|
|
})
|
|
|
|
query := dynamicquery.Query{
|
|
Table: "udm_events_aion",
|
|
Schema: "source",
|
|
Fields: &fields,
|
|
Limit: 5,
|
|
}
|
|
return query
|
|
}
|
|
|
|
func TestClient_GetSegmentMembers(t *testing.T) {
|
|
client := getClient(t)
|
|
|
|
c, err := client.GetSegmentMembers(makeCondition())
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if c == nil {
|
|
t.Fatal("count is nil")
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "GetSegmentMembers")
|
|
fmt.Fprintln(os.Stdout, *c)
|
|
fmt.Println("")
|
|
}
|
|
|
|
func TestClient_IntersectMembersToSegment(t *testing.T) {
|
|
client := getClient(t)
|
|
|
|
intersectMembers := make([]string, 0)
|
|
intersectMembers = append(intersectMembers, "a090b025a1489aa6c9204d7b85ac77d51b814402d5cbdec27335575bb46e4f20")
|
|
|
|
c, err := client.IntersectMembersToSegment(intersectMembers, makeCondition())
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if c == nil {
|
|
t.Fatal("count is nil")
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "IntersectMembersToSegment")
|
|
fmt.Fprintln(os.Stdout, *c)
|
|
fmt.Println("")
|
|
}
|
|
|
|
func TestClient_ExecuteDynamicQuery(t *testing.T) {
|
|
client := getClient(t)
|
|
|
|
resp, err := client.ExecuteDynamicQuery(makeQuery(makeCondition()), false, 10)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if resp == nil {
|
|
t.Fatal("resp is nil")
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "ExecuteDynamicQuery")
|
|
fmt.Fprintln(os.Stdout, *resp)
|
|
fmt.Println("")
|
|
}
|
|
|
|
func TestClient_ExecuteDynamicQueryWithWindowing(t *testing.T) {
|
|
client := getClient(t)
|
|
|
|
resp, err := client.ExecuteDynamicQuery(makeWindowingQuery(), false, 10)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if resp == nil {
|
|
t.Fatal("resp is nil")
|
|
}
|
|
|
|
if resp.Error != "" {
|
|
t.Fatalf("error is not empty %s", resp.Error)
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "ExecuteDynamicQueryWithWindowing")
|
|
fmt.Fprintln(os.Stdout, *resp)
|
|
fmt.Println("")
|
|
}
|
|
|
|
func TestClient_ExecuteDynamicQueryWithFields(t *testing.T) {
|
|
client := getClient(t)
|
|
|
|
resp, err := client.ExecuteDynamicQuery(makeFieldsQuery(), false, 10)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if resp == nil {
|
|
t.Fatal("resp is nil")
|
|
}
|
|
|
|
if resp.Error != "" {
|
|
t.Fatalf("error is not empty %s", resp.Error)
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "TestClient_ExecuteDynamicQueryWithFields")
|
|
fmt.Fprintln(os.Stdout, *resp)
|
|
fmt.Println("")
|
|
}
|
|
|
|
func TestClient_ExecuteDynamicQueryWithError(t *testing.T) {
|
|
client := getClient(t)
|
|
query := makeQuery(makeCondition())
|
|
query.Table = "foobar"
|
|
resp, err := client.ExecuteDynamicQuery(query, false, 10)
|
|
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if resp == nil {
|
|
t.Fatal("resp is nil")
|
|
}
|
|
if resp.Error == "" {
|
|
t.Fatal("error should not be nil")
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "ExecuteDynamicQuery")
|
|
fmt.Fprintln(os.Stdout, *resp)
|
|
fmt.Println("")
|
|
}
|
|
|
|
func TestClient_GetMemberPartitions(t *testing.T) {
|
|
client := getClient(t)
|
|
entityID := "ad43bf8e-0f0c-4102-be91-52bc84150af2"
|
|
memberID := "a0969f676e0274c34fffb4261b59d3de48de0d5845ed9780ac43045cf954ed81"
|
|
|
|
c, err := client.GetMemberPartitions(entityID, memberID)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if c == nil {
|
|
t.Fatal("count is nil")
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "GetMemberPartitions")
|
|
fmt.Fprintln(os.Stdout, *c)
|
|
fmt.Println("")
|
|
}
|
|
|
|
func TestClient_GetDatasets(t *testing.T) {
|
|
client := getClient(t)
|
|
entityID := "ad43bf8e-0f0c-4102-be91-52bc84150af2"
|
|
|
|
c, err := client.GetDatasets(entityID, "")
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
if c == nil {
|
|
t.Fatal("count is nil")
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "GetDatasets")
|
|
fmt.Fprintln(os.Stdout, *c)
|
|
fmt.Println("")
|
|
}
|
|
|
|
// func TestClient_Refresh(t *testing.T) {
|
|
// client := getClient(t)
|
|
// entityID := "ad43bf8e-0f0c-4102-be91-52bc84150af2"
|
|
|
|
// tags := make([]string, 0)
|
|
// tags = append(tags, "60m")
|
|
|
|
// ra := RefreshArgs{
|
|
// EntityID: entityID,
|
|
// Stage: "INCREMENTAL_REFRESH",
|
|
// Tags: tags,
|
|
// }
|
|
// c, err := client.Refresh(ra)
|
|
// if err != nil {
|
|
// t.Fatalf("Unexpected error: %v", err)
|
|
// }
|
|
// if c == nil {
|
|
// t.Fatal("count is nil")
|
|
// }
|
|
|
|
// fmt.Fprintln(os.Stdout, "Refresh")
|
|
// fmt.Fprintln(os.Stdout, *c)
|
|
// fmt.Println("")
|
|
// }
|
|
|
|
// func TestClient_GetRefreshJob(t *testing.T) {
|
|
// client := getClient(t)
|
|
// jobID := "0f5f8149-03b7-4809-ae3b-0b319cf062c0"
|
|
|
|
// c, err := client.GetRefreshJob(jobID)
|
|
// if err != nil {
|
|
// t.Fatalf("Unexpected error: %v", err)
|
|
// }
|
|
// if c == nil {
|
|
// t.Fatal("count is nil")
|
|
// }
|
|
|
|
// fmt.Fprintln(os.Stdout, "GetRefreshJob")
|
|
// fmt.Fprintln(os.Stdout, *c)
|
|
// fmt.Println("")
|
|
// }
|
|
|
|
func getClient(t *testing.T) Client {
|
|
apiKey := os.Getenv("FLIP_API_KEY")
|
|
if apiKey == "" {
|
|
panic("Missing environment variable: `FLIP_API_KEY`")
|
|
}
|
|
|
|
baseURL := os.Getenv("FLIP_BASE_URL")
|
|
if baseURL == "" {
|
|
panic("Missing environment variable: `FLIP_BASE_URL`")
|
|
}
|
|
|
|
config := Config{
|
|
APIKey: apiKey,
|
|
BaseURL: baseURL,
|
|
}
|
|
client, err := NewClient(config)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
return client
|
|
}
|