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