diff --git a/query_test.go b/query_test.go index 38d4e02..c8d7697 100644 --- a/query_test.go +++ b/query_test.go @@ -1,6 +1,7 @@ package gql import ( + "math/rand" "reflect" "testing" @@ -413,3 +414,61 @@ func TestBaseClient_QueryCache(t *testing.T) { }) } } + +func TestBaseClient_QueryCacheRandomizedRace(t *testing.T) { + type fields struct { + graphql_endpoint string + cache_enabled bool + } + type args struct { + queryVariables interface{} + queryHeaders map[string]interface{} + queryContent string + } + tests := []struct { + want any + args args + name string + fields fields + wantErr bool + }{ + { + name: "Test QueryCache - enabled", + fields: fields{ + graphql_endpoint: "https://spacex-production.up.railway.app/", + }, + args: args{ + queryContent: `query Dragons { + dragons { + name + } + }`, + queryHeaders: map[string]interface{}{ + "x-apollo-operation-name": "Missions-Potato-Test-Golang", + "content-type": "application/json", + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + c := NewConnection() + if tt.fields.graphql_endpoint != "" { + c.endpoint = tt.fields.graphql_endpoint + } + + for i := 0; i < 10; i++ { + c.cache.enabled = rand.Intn(2) == 0 + go func() { + _, err := c.Query(tt.args.queryContent, tt.args.queryVariables, tt.args.queryHeaders) + if !tt.wantErr { + assert.NoError(t, err) + } else { + assert.Error(t, err) + } + }() + } + }) + } +}