(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 | IgnoreCaseSensitve bool `yaml:"ignoreCaseSensitive,omitempty"` |
| 26 | // Metadata is the protojson encoded storepb.DatabaseSchemaMetadata, |
| 27 | // if it's empty, we will use the defaultDatabaseMetadata. |
| 28 | Metadata []string `yaml:"metadata,omitempty"` |
| 29 | QuerySpan *base.YamlQuerySpan `yaml:"querySpan,omitempty"` |
| 30 | } |
| 31 | |
| 32 | var ( |
| 33 | record = false |
| 34 | testDataPaths = []string{ |
| 35 | "test-data/query-span/standard.yaml", |
| 36 | "test-data/query-span/join.yaml", |
| 37 | "test-data/query-span/case-sensitivity.yaml", |
| 38 | "test-data/query-span/query_type.yaml", |
| 39 | "test-data/query-span/predicate.yaml", |
| 40 | "test-data/query-span/regression.yaml", |
| 41 | } |
| 42 | ) |
| 43 | |
| 44 | a := require.New(t) |
| 45 | for _, testDataPath := range testDataPaths { |
| 46 | yamlFile, err := os.Open(testDataPath) |
| 47 | a.NoError(err) |
| 48 | |
| 49 | var testCases []testCase |
| 50 | byteValue, err := io.ReadAll(yamlFile) |
| 51 | a.NoError(err) |
| 52 | a.NoError(yamlFile.Close()) |
| 53 | a.NoError(yaml.Unmarshal(byteValue, &testCases)) |
| 54 | |
| 55 | for i, tc := range testCases { |
| 56 | var ms []*storepb.DatabaseSchemaMetadata |
| 57 | for _, metadata := range tc.Metadata { |
| 58 | storepbMetadata := &storepb.DatabaseSchemaMetadata{} |
| 59 | a.NoErrorf(common.ProtojsonUnmarshaler.Unmarshal([]byte(metadata), storepbMetadata), "cases %d", i+1) |
| 60 | ms = append(ms, storepbMetadata) |
| 61 | } |
| 62 | databaseMetadataGetter, databaseNameLister := buildMockDatabaseMetadataGetter(ms) |
| 63 | result, err := GetQuerySpan(context.TODO(), base.GetQuerySpanContext{ |
| 64 | GetDatabaseMetadataFunc: databaseMetadataGetter, |
| 65 | ListDatabaseNamesFunc: databaseNameLister, |
| 66 | TempTables: make(map[string]*base.PhysicalTable), |
| 67 | }, base.Statement{Text: tc.Statement}, tc.DefaultDatabase, "dbo", tc.IgnoreCaseSensitve) |
| 68 | a.NoErrorf(err, "statement: %s", tc.Statement) |
| 69 | resultYaml := result.ToYaml() |
| 70 | if record { |
| 71 | testCases[i].QuerySpan = resultYaml |
| 72 | } else { |
| 73 | a.Equalf(tc.QuerySpan, resultYaml, "statement: %s", tc.Statement) |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | if record { |
nothing calls this directly
no test coverage detected