(t *testing.T)
| 18 | ) |
| 19 | |
| 20 | func TestGetQuerySpan(t *testing.T) { |
| 21 | type testCase struct { |
| 22 | Description string `yaml:"description,omitempty"` |
| 23 | Statement string `yaml:"statement,omitempty"` |
| 24 | DefaultDatabase string `yaml:"defaultDatabase,omitempty"` |
| 25 | // Metadata is the protojson encoded storepb.DatabaseSchemaMetadata, |
| 26 | // if it's empty, we will use the defaultDatabaseMetadata. |
| 27 | Metadata string `yaml:"metadata,omitempty"` |
| 28 | QuerySpan *base.YamlQuerySpan `yaml:"querySpan,omitempty"` |
| 29 | } |
| 30 | |
| 31 | const ( |
| 32 | record = false |
| 33 | ) |
| 34 | |
| 35 | var ( |
| 36 | testDataPaths = []string{"test-data/query_span.yaml", "test-data/query_type.yaml"} |
| 37 | ) |
| 38 | |
| 39 | a := require.New(t) |
| 40 | for _, testDataPath := range testDataPaths { |
| 41 | yamlFile, err := os.Open(testDataPath) |
| 42 | a.NoError(err) |
| 43 | |
| 44 | var testCases []testCase |
| 45 | byteValue, err := io.ReadAll(yamlFile) |
| 46 | a.NoError(err) |
| 47 | a.NoError(yamlFile.Close()) |
| 48 | a.NoError(yaml.Unmarshal(byteValue, &testCases)) |
| 49 | |
| 50 | for i, tc := range testCases { |
| 51 | metadata := &storepb.DatabaseSchemaMetadata{} |
| 52 | a.NoError(common.ProtojsonUnmarshaler.Unmarshal([]byte(tc.Metadata), metadata)) |
| 53 | databaseMetadataGetter, databaseNameLister := buildMockDatabaseMetadataGetter([]*storepb.DatabaseSchemaMetadata{metadata}) |
| 54 | result, err := GetQuerySpan(context.TODO(), base.GetQuerySpanContext{ |
| 55 | GetDatabaseMetadataFunc: databaseMetadataGetter, |
| 56 | ListDatabaseNamesFunc: databaseNameLister, |
| 57 | }, base.Statement{Text: tc.Statement}, tc.DefaultDatabase, "", false) |
| 58 | a.NoErrorf(err, "idx: %d statement: %s", i, tc.Statement) |
| 59 | resultYaml := result.ToYaml() |
| 60 | if record { |
| 61 | testCases[i].QuerySpan = resultYaml |
| 62 | } else { |
| 63 | a.Equal(tc.QuerySpan, resultYaml, "idx: %d statement: %s", i, tc.Statement) |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | if record { |
| 68 | yamltest.Record(t, testDataPath, testCases) |
| 69 | } |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | func buildMockDatabaseMetadataGetter(databaseMetadata []*storepb.DatabaseSchemaMetadata) (base.GetDatabaseMetadataFunc, base.ListDatabaseNamesFunc) { |
| 74 | return func(_ context.Context, _, databaseName string) (string, *model.DatabaseMetadata, error) { |
nothing calls this directly
no test coverage detected