diff --git a/src/Cli/src/ConfigGenerator.cs b/src/Cli/src/ConfigGenerator.cs index 3f2e690d94..70395344b5 100644 --- a/src/Cli/src/ConfigGenerator.cs +++ b/src/Cli/src/ConfigGenerator.cs @@ -53,59 +53,47 @@ public static bool TryCreateRuntimeConfig(InitOptions options, out string runtim runtimeConfigJson = string.Empty; DatabaseType dbType = options.DatabaseType; - DataSource dataSource = new(dbType); - // default value of connection-string should be used, i.e Empty-string - // if not explicitly provided by the user - if (options.ConnectionString is not null) - { - dataSource.ConnectionString = options.ConnectionString; - } - - CosmosDbOptions? cosmosDbOptions = null; - MsSqlOptions? msSqlOptions = null; - MySqlOptions? mySqlOptions = null; - PostgreSqlOptions? postgreSqlOptions = null; + CosmosDbOptions? cosmosDbNoSqlOptions = null; switch (dbType) { case DatabaseType.cosmos: + case DatabaseType.cosmosdb_nosql: string? cosmosDatabase = options.CosmosDatabase; string? cosmosContainer = options.CosmosContainer; string? graphQLSchemaPath = options.GraphQLSchemaPath; if (string.IsNullOrEmpty(cosmosDatabase) || string.IsNullOrEmpty(graphQLSchemaPath)) { - Console.WriteLine($"Provide all the mandatory options for CosmosDB: --cosmos-database, and --graphql-schema"); + Console.WriteLine($"Provide all the mandatory options for CosmosDB_NoSql: --cosmos-database, and --graphql-schema"); return false; } - cosmosDbOptions = new CosmosDbOptions(cosmosDatabase, cosmosContainer, graphQLSchemaPath, GraphQLSchema: null); + cosmosDbNoSqlOptions = new CosmosDbOptions(cosmosDatabase, cosmosContainer, graphQLSchemaPath, GraphQLSchema: null); break; case DatabaseType.mssql: - msSqlOptions = new MsSqlOptions(); - break; - case DatabaseType.mysql: - mySqlOptions = new MySqlOptions(); - break; - case DatabaseType.postgresql: - postgreSqlOptions = new PostgreSqlOptions(); + case DatabaseType.cosmosdb_postgresql: break; - default: - Console.WriteLine($"DatabaseType: ${dbType} not supported.Please provide a valid database-type."); - return false; + throw new Exception($"DatabaseType: ${dbType} not supported.Please provide a valid database-type."); + } + + DataSource dataSource = new(dbType, DbOptions: cosmosDbNoSqlOptions); + + // default value of connection-string should be used, i.e Empty-string + // if not explicitly provided by the user + if (options.ConnectionString is not null) + { + dataSource.ConnectionString = options.ConnectionString; } RuntimeConfig runtimeConfig = new( Schema: RuntimeConfig.SCHEMA, DataSource: dataSource, - CosmosDb: cosmosDbOptions, - MsSql: msSqlOptions, - PostgreSql: postgreSqlOptions, - MySql: mySqlOptions, + CosmosDb: cosmosDbNoSqlOptions, RuntimeSettings: GetDefaultGlobalSettings( options.HostMode, options.CorsOrigin, diff --git a/src/Cli/test/EndToEndTests.cs b/src/Cli/test/EndToEndTests.cs index 4e33255949..ee301fba42 100644 --- a/src/Cli/test/EndToEndTests.cs +++ b/src/Cli/test/EndToEndTests.cs @@ -10,12 +10,12 @@ namespace Cli.Tests; public class EndToEndTests { /// - /// Initializing config for cosmos DB. + /// Initializing config for cosmosdb_nosql. /// [TestMethod] - public void TestInitForCosmosDB() + public void TestInitForCosmosDBNoSql() { - string[] args = { "init", "-c", _testRuntimeConfig, "--database-type", "cosmos", + string[] args = { "init", "-c", _testRuntimeConfig, "--database-type", "cosmosdb_nosql", "--connection-string", "localhost:5000", "--authenticate-devmode-requests", "True", "--cosmos-database", "graphqldb", "--cosmos-container", "planet", "--graphql-schema", "schema.gql", "--cors-origin", "localhost:3000,www.nolocalhost.com:80" }; Program.Main(args); @@ -24,11 +24,41 @@ public void TestInitForCosmosDB() Assert.IsNotNull(runtimeConfig); Assert.IsTrue(runtimeConfig.GraphQLGlobalSettings.AllowIntrospection); - Assert.AreEqual(DatabaseType.cosmos, runtimeConfig.DatabaseType); - Assert.IsNotNull(runtimeConfig.CosmosDb); - Assert.AreEqual("graphqldb", runtimeConfig.CosmosDb.Database); - Assert.AreEqual("planet", runtimeConfig.CosmosDb.Container); - Assert.AreEqual("schema.gql", runtimeConfig.CosmosDb.GraphQLSchemaPath); + Assert.AreEqual(DatabaseType.cosmosdb_nosql, runtimeConfig.DatabaseType); + Assert.IsNotNull(runtimeConfig.DataSource.CosmosDbNoSql); + Assert.AreEqual("graphqldb", runtimeConfig.DataSource.CosmosDbNoSql.Database); + Assert.AreEqual("planet", runtimeConfig.DataSource.CosmosDbNoSql.Container); + Assert.AreEqual("schema.gql", runtimeConfig.DataSource.CosmosDbNoSql.GraphQLSchemaPath); + Assert.IsNotNull(runtimeConfig.RuntimeSettings); + Assert.AreEqual(true, runtimeConfig.HostGlobalSettings.IsDevModeDefaultRequestAuthenticated); + JsonElement jsonRestSettings = (JsonElement)runtimeConfig.RuntimeSettings[GlobalSettingsType.Rest]; + + RestGlobalSettings? restGlobalSettings = JsonSerializer.Deserialize(jsonRestSettings, RuntimeConfig.SerializerOptions); + Assert.IsNotNull(restGlobalSettings); + Assert.IsNotNull(runtimeConfig.HostGlobalSettings); + + Assert.IsTrue(runtimeConfig.RuntimeSettings.ContainsKey(GlobalSettingsType.Host)); + HostGlobalSettings? hostGlobalSettings = JsonSerializer.Deserialize((JsonElement)runtimeConfig.RuntimeSettings[GlobalSettingsType.Host], RuntimeConfig.SerializerOptions); + Assert.IsNotNull(hostGlobalSettings); + CollectionAssert.AreEqual(new string[] { "localhost:3000", "www.nolocalhost.com:80" }, hostGlobalSettings.Cors!.Origins); + } + + /// + /// Initializing config for cosmosdb_postgresql. + /// + [TestMethod] + public void TestInitForCosmosDBPostgreSql() + { + string[] args = { "init", "-c", _testRuntimeConfig, "--database-type", "cosmosdb_postgresql", + "--connection-string", "localhost:5000", "--authenticate-devmode-requests", "True", + "--cors-origin", "localhost:3000,www.nolocalhost.com:80" }; + Program.Main(args); + + RuntimeConfig? runtimeConfig = TryGetRuntimeConfig(_testRuntimeConfig); + + Assert.IsNotNull(runtimeConfig); + Assert.AreEqual(DatabaseType.cosmosdb_postgresql, runtimeConfig.DatabaseType); + Assert.IsNull(runtimeConfig.DataSource.CosmosDbPostgreSql); Assert.IsNotNull(runtimeConfig.RuntimeSettings); Assert.AreEqual(true, runtimeConfig.HostGlobalSettings.IsDevModeDefaultRequestAuthenticated); JsonElement jsonRestSettings = (JsonElement)runtimeConfig.RuntimeSettings[GlobalSettingsType.Rest]; diff --git a/src/Cli/test/InitTests.cs b/src/Cli/test/InitTests.cs index ddc9898b6c..2adeae853d 100644 --- a/src/Cli/test/InitTests.cs +++ b/src/Cli/test/InitTests.cs @@ -39,7 +39,46 @@ public void MssqlDatabase() // Adding runtime settings to the above basic config string expectedRuntimeConfig = AddPropertiesToJson( _basicRuntimeConfig, - GetDefaultTestRuntimeSettingString(DatabaseType.mssql, + GetDefaultTestRuntimeSettingString( + HostModeType.Development, + new List() { "http://localhost:3000", "http://nolocalhost:80" }, + authenticateDevModeRequest: true) + ); + + RunTest(options, expectedRuntimeConfig); + } + + /// + /// Test the simple init config for cosmosdb_postgresql database. + /// + [TestMethod] + public void CosmosDbPostgreSqlDatabase() + { + InitOptions options = new( + databaseType: DatabaseType.cosmosdb_postgresql, + connectionString: "testconnectionstring", + cosmosDatabase: null, + cosmosContainer: null, + graphQLSchemaPath: null, + hostMode: HostModeType.Development, + corsOrigin: new List() { "http://localhost:3000", "http://nolocalhost:80" }, + config: _testRuntimeConfig, + devModeDefaultAuth: "true"); + + _basicRuntimeConfig = + @"{ + ""$schema"": ""dab.draft.schema.json"", + ""data-source"": { + ""database-type"": ""cosmosdb_postgresql"", + ""connection-string"": ""testconnectionstring"" + }, + ""entities"": {} + }"; + + // Adding runtime settings to the above basic config + string expectedRuntimeConfig = AddPropertiesToJson( + _basicRuntimeConfig, + GetDefaultTestRuntimeSettingString( HostModeType.Development, new List() { "http://localhost:3000", "http://nolocalhost:80" }, authenticateDevModeRequest: true) @@ -78,7 +117,7 @@ public void TestInitializingConfigWithoutConnectionString() // Adding runtime settings to the above basic config string expectedRuntimeConfig = AddPropertiesToJson( _basicRuntimeConfig, - GetDefaultTestRuntimeSettingString(DatabaseType.mssql, + GetDefaultTestRuntimeSettingString( HostModeType.Development, new List() { "http://localhost:3000", "http://nolocalhost:80" }, authenticateDevModeRequest: false) @@ -87,13 +126,13 @@ public void TestInitializingConfigWithoutConnectionString() } /// - /// Test cosmos db specifc settings like cosmos-database, cosmos-container, cosmos-schema file. + /// Test cosmosdb_nosql specifc settings like cosmos-database, cosmos-container, cosmos-schema file. /// [TestMethod] - public void CosmosDatabase() + public void CosmosDbNoSqlDatabase() { InitOptions options = new( - databaseType: DatabaseType.cosmos, + databaseType: DatabaseType.cosmosdb_nosql, connectionString: "testconnectionstring", cosmosDatabase: "testdb", cosmosContainer: "testcontainer", @@ -106,8 +145,13 @@ public void CosmosDatabase() _basicRuntimeConfig = @"{ ""$schema"": ""dab.draft.schema.json"", ""data-source"": { - ""database-type"": ""cosmos"", - ""connection-string"": ""testconnectionstring"" + ""database-type"": ""cosmosdb_nosql"", + ""connection-string"": ""testconnectionstring"", + ""options"": { + ""database"": ""testdb"", + ""container"": ""testcontainer"", + ""schema"": ""schemafile"" + } }, ""cosmos"": { ""database"": ""testdb"", @@ -120,7 +164,7 @@ public void CosmosDatabase() // Adding runtime settings to the above basic config string expectedRuntimeConfig = AddPropertiesToJson( _basicRuntimeConfig, - GetDefaultTestRuntimeSettingString(DatabaseType.cosmos)); + GetDefaultTestRuntimeSettingString()); RunTest(options, expectedRuntimeConfig); } @@ -133,14 +177,14 @@ public void CosmosDatabase() [DataRow("testDatabase", null, "", false, DisplayName = "database is provided, container and Schema is null/empty.")] [DataRow("testDatabase", null, "testSchema", true, DisplayName = "database and schema provided, container is null/empty.")] [DataTestMethod] - public void VerifyRequiredOptionsForCosmosDatabase( + public void VerifyRequiredOptionsForCosmosDbNoSqlDatabase( string? cosmosDatabase, string? cosmosContainer, string? graphQLSchema, bool expectedResult) { InitOptions options = new( - databaseType: DatabaseType.cosmos, + databaseType: DatabaseType.cosmosdb_nosql, connectionString: "testconnectionstring", cosmosDatabase: cosmosDatabase, cosmosContainer: cosmosContainer, diff --git a/src/Cli/test/TestHelper.cs b/src/Cli/test/TestHelper.cs index bbbd4e73a6..e782ee7821 100644 --- a/src/Cli/test/TestHelper.cs +++ b/src/Cli/test/TestHelper.cs @@ -417,7 +417,6 @@ public static Process StartDabProcess(string command, string flags) /// for json comparison in tests. /// public static string GetDefaultTestRuntimeSettingString( - DatabaseType databaseType, HostModeType hostModeType = HostModeType.Production, IEnumerable? corsOrigins = null, bool? authenticateDevModeRequest = null) diff --git a/src/Cli/test/UpdateEntityTests.cs b/src/Cli/test/UpdateEntityTests.cs index 307d6e38be..87123040b8 100644 --- a/src/Cli/test/UpdateEntityTests.cs +++ b/src/Cli/test/UpdateEntityTests.cs @@ -1585,10 +1585,6 @@ public void TestVerifyCanUpdateRelationshipInvalidOptions(string db, string card RuntimeConfig runtimeConfig = new( Schema: "schema", DataSource: new DataSource(Enum.Parse(db)), - CosmosDb: null, - MsSql: null, - PostgreSql: null, - MySql: null, RuntimeSettings: new Dictionary(), Entities: new Dictionary() ); @@ -1639,10 +1635,6 @@ public void EnsureFailure_AddRelationshipToEntityWithDisabledGraphQL() RuntimeConfig runtimeConfig = new( Schema: "schema", DataSource: new DataSource(DatabaseType.mssql), - CosmosDb: null, - MsSql: null, - PostgreSql: null, - MySql: null, RuntimeSettings: new Dictionary(), Entities: entityMap ); diff --git a/src/Config/DataSource.cs b/src/Config/DataSource.cs index 7122edb688..00bd42b79b 100644 --- a/src/Config/DataSource.cs +++ b/src/Config/DataSource.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Serialization; namespace Azure.DataApiBuilder.Config @@ -10,14 +11,56 @@ namespace Azure.DataApiBuilder.Config /// will use to connect to the backend database. public record DataSource( [property: JsonPropertyName(DataSource.DATABASE_PROPERTY_NAME)] - DatabaseType DatabaseType) + DatabaseType DatabaseType, + [property: JsonPropertyName(DataSource.OPTIONS_PROPERTY_NAME)] + object? DbOptions = null) { public const string JSON_PROPERTY_NAME = "data-source"; public const string DATABASE_PROPERTY_NAME = "database-type"; public const string CONNSTRING_PROPERTY_NAME = "connection-string"; + public const string OPTIONS_PROPERTY_NAME = "options"; [property: JsonPropertyName(CONNSTRING_PROPERTY_NAME)] public string ConnectionString { get; set; } = string.Empty; + public CosmosDbOptions? CosmosDbNoSql { get; set; } + public CosmosDbPostgreSqlOptions? CosmosDbPostgreSql { get; set; } + public MsSqlOptions? MsSql { get; set; } + public PostgreSqlOptions? PostgreSql { get; set; } + public MySqlOptions? MySql { get; set; } + + /// + /// Method to populate the database specific options from the "options" + /// section in data-source. + /// + public void PopulateDbSpecificOptions() + { + if (DbOptions is null) + { + return; + } + + switch (DatabaseType) + { + case DatabaseType.cosmos: + case DatabaseType.cosmosdb_nosql: + CosmosDbNoSql = ((JsonElement)DbOptions).Deserialize(RuntimeConfig.SerializerOptions)!; + break; + case DatabaseType.mssql: + MsSql = ((JsonElement)DbOptions).Deserialize(RuntimeConfig.SerializerOptions)!; + break; + case DatabaseType.mysql: + MySql = ((JsonElement)DbOptions).Deserialize(RuntimeConfig.SerializerOptions)!; + break; + case DatabaseType.postgresql: + PostgreSql = ((JsonElement)DbOptions).Deserialize(RuntimeConfig.SerializerOptions)!; + break; + case DatabaseType.cosmosdb_postgresql: + CosmosDbPostgreSql = ((JsonElement)DbOptions).Deserialize(RuntimeConfig.SerializerOptions)!; + break; + default: + throw new Exception($"DatabaseType: ${DatabaseType} not supported."); + } + } } /// @@ -32,6 +75,9 @@ public record CosmosDbOptions( string? GraphQLSchema) { public const string GRAPHQL_SCHEMA_PATH_PROPERTY_NAME = "schema"; + + // Keeping the name as cosmos only to provide backwards compatibility. + // This property won't be needed going forward. public const string JSON_PROPERTY_NAME = nameof(DatabaseType.cosmos); } @@ -40,6 +86,7 @@ public record CosmosDbOptions( /// public record MsSqlOptions( [property: JsonPropertyName("set-session-context")] + [property: JsonIgnore] bool SetSessionContext = true) { public const string JSON_PROPERTY_NAME = nameof(DatabaseType.mssql); @@ -56,6 +103,11 @@ public record PostgreSqlOptions public const string JSON_PROPERTY_NAME = nameof(DatabaseType.postgresql); } + /// + /// Options for CosmosDb_PostgresSql database. + /// + public record CosmosDbPostgreSqlOptions { } + /// /// Options for MySql database. /// @@ -70,6 +122,8 @@ public record MySqlOptions public enum DatabaseType { cosmos, + cosmosdb_postgresql, + cosmosdb_nosql, mssql, mysql, postgresql diff --git a/src/Config/RuntimeConfig.cs b/src/Config/RuntimeConfig.cs index a51aa16332..702616c513 100644 --- a/src/Config/RuntimeConfig.cs +++ b/src/Config/RuntimeConfig.cs @@ -54,21 +54,12 @@ namespace Azure.DataApiBuilder.Config public record RuntimeConfig( [property: JsonPropertyName(RuntimeConfig.SCHEMA_PROPERTY_NAME)] string Schema, [property: JsonPropertyName(DataSource.JSON_PROPERTY_NAME)] DataSource DataSource, - [property: JsonPropertyName(CosmosDbOptions.JSON_PROPERTY_NAME)] - CosmosDbOptions? CosmosDb, - [property: JsonPropertyName(MsSqlOptions.JSON_PROPERTY_NAME)] - [property: JsonIgnore] - MsSqlOptions? MsSql, - [property: JsonPropertyName(PostgreSqlOptions.JSON_PROPERTY_NAME)] - [property: JsonIgnore] - PostgreSqlOptions? PostgreSql, - [property: JsonPropertyName(MySqlOptions.JSON_PROPERTY_NAME)] - [property: JsonIgnore] - MySqlOptions? MySql, [property: JsonPropertyName(GlobalSettings.JSON_PROPERTY_NAME)] Dictionary? RuntimeSettings, [property: JsonPropertyName(Entity.JSON_PROPERTY_NAME)] - Dictionary Entities) + Dictionary Entities, + [property: JsonPropertyName(CosmosDbOptions.JSON_PROPERTY_NAME)] + CosmosDbOptions? CosmosDb = null) { public const string SCHEMA_PROPERTY_NAME = "$schema"; public const string SCHEMA = "dab.draft.schema.json"; @@ -211,6 +202,7 @@ public static bool TryGetDeserializedRuntimeConfig( deserializedRuntimeConfig = JsonSerializer.Deserialize(configJson, SerializerOptions); deserializedRuntimeConfig!.DetermineGlobalSettings(); deserializedRuntimeConfig!.DetermineGraphQLEntityNames(); + deserializedRuntimeConfig.DataSource.PopulateDbSpecificOptions(); return true; } catch (Exception ex) diff --git a/src/Service.Tests/Authorization/AuthorizationHelpers.cs b/src/Service.Tests/Authorization/AuthorizationHelpers.cs index 7b0f1c5e15..c07d902204 100644 --- a/src/Service.Tests/Authorization/AuthorizationHelpers.cs +++ b/src/Service.Tests/Authorization/AuthorizationHelpers.cs @@ -107,10 +107,6 @@ public static RuntimeConfig InitRuntimeConfig( RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap diff --git a/src/Service.Tests/Authorization/AuthorizationResolverUnitTests.cs b/src/Service.Tests/Authorization/AuthorizationResolverUnitTests.cs index 170e6e748a..dd966c653f 100644 --- a/src/Service.Tests/Authorization/AuthorizationResolverUnitTests.cs +++ b/src/Service.Tests/Authorization/AuthorizationResolverUnitTests.cs @@ -216,10 +216,6 @@ public void TestRoleAndOperationCombination() RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap @@ -452,10 +448,6 @@ public void TestAuthenticatedRoleWhenBothAnonymousAndAuthenticatedAreDefined() RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap @@ -1197,10 +1189,6 @@ public static RuntimeConfig InitRuntimeConfig( RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap diff --git a/src/Service.Tests/Configuration/AuthenticationConfigValidatorUnitTests.cs b/src/Service.Tests/Configuration/AuthenticationConfigValidatorUnitTests.cs index 8e77aaf69d..8c97696a32 100644 --- a/src/Service.Tests/Configuration/AuthenticationConfigValidatorUnitTests.cs +++ b/src/Service.Tests/Configuration/AuthenticationConfigValidatorUnitTests.cs @@ -160,10 +160,6 @@ private static RuntimeConfig RuntimeConfig config = new( Schema: RuntimeConfig.SCHEMA, DataSource: dataSource, - CosmosDb: null, - MsSql: null, - PostgreSql: null, - MySql: null, RuntimeSettings: runtimeSettings, Entities: entities ); diff --git a/src/Service.Tests/Configuration/ConfigurationTests.cs b/src/Service.Tests/Configuration/ConfigurationTests.cs index 04f19dfe00..6a97169093 100644 --- a/src/Service.Tests/Configuration/ConfigurationTests.cs +++ b/src/Service.Tests/Configuration/ConfigurationTests.cs @@ -499,15 +499,14 @@ private static void ConfigFileDeserializationValidationHelper(string jsonString) RuntimeConfig.TryGetDeserializedRuntimeConfig(jsonString, out RuntimeConfig runtimeConfig, logger.Object); Assert.IsNotNull(runtimeConfig.Schema); Assert.IsInstanceOfType(runtimeConfig.DataSource, typeof(DataSource)); - Assert.IsTrue(runtimeConfig.CosmosDb == null - || runtimeConfig.CosmosDb.GetType() == typeof(CosmosDbOptions)); - Assert.IsTrue(runtimeConfig.MsSql == null - || runtimeConfig.MsSql.GetType() == typeof(MsSqlOptions)); - Assert.IsTrue(runtimeConfig.PostgreSql == null - || runtimeConfig.PostgreSql.GetType() == typeof(PostgreSqlOptions)); - Assert.IsTrue(runtimeConfig.MySql == null - || runtimeConfig.MySql.GetType() == typeof(MySqlOptions)); - Assert.IsInstanceOfType(runtimeConfig.Entities, typeof(Dictionary)); + Assert.IsTrue(runtimeConfig.DataSource.CosmosDbNoSql == null + || runtimeConfig.DataSource.CosmosDbNoSql.GetType() == typeof(CosmosDbOptions)); + Assert.IsTrue(runtimeConfig.DataSource.MsSql == null + || runtimeConfig.DataSource.MsSql.GetType() == typeof(MsSqlOptions)); + Assert.IsTrue(runtimeConfig.DataSource.PostgreSql == null + || runtimeConfig.DataSource.PostgreSql.GetType() == typeof(PostgreSqlOptions)); + Assert.IsTrue(runtimeConfig.DataSource.MySql == null + || runtimeConfig.DataSource.MySql.GetType() == typeof(MySqlOptions)); foreach (Entity entity in runtimeConfig.Entities.Values) { @@ -1019,10 +1018,6 @@ public static RuntimeConfig InitMinimalRuntimeConfig(Dictionary(), Entities: entityMap @@ -206,10 +202,6 @@ public void TestAddingRelationshipWithDisabledGraphQL() RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap @@ -257,10 +249,6 @@ string relationshipEntity RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap @@ -360,10 +348,6 @@ bool isValidScenario RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap @@ -447,10 +431,6 @@ public void TestRelationshipWithNoLinkingObjectAndEitherSourceOrTargetFieldIsNul RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap @@ -669,10 +649,6 @@ public void TestOperationValidityAndCasing(string operationName, bool exceptionE RuntimeConfig runtimeConfig = new( Schema: "UnitTestSchema", - MsSql: null, - CosmosDb: null, - PostgreSql: null, - MySql: null, DataSource: new DataSource(DatabaseType: DatabaseType.mssql), RuntimeSettings: new Dictionary(), Entities: entityMap diff --git a/src/Service/Configurations/RuntimeConfigValidator.cs b/src/Service/Configurations/RuntimeConfigValidator.cs index 02513f6a40..13c6b62b34 100644 --- a/src/Service/Configurations/RuntimeConfigValidator.cs +++ b/src/Service/Configurations/RuntimeConfigValidator.cs @@ -118,23 +118,25 @@ public static void ValidateDatabaseType( // Schema file should be present in the directory if not specified in the config // when using cosmos database. - if (runtimeConfig.DatabaseType is DatabaseType.cosmos) + if (runtimeConfig.DatabaseType is DatabaseType.cosmos || + runtimeConfig.DatabaseType is DatabaseType.cosmosdb_nosql) { - if (runtimeConfig.CosmosDb is null) + CosmosDbOptions cosmosDbNoSql = runtimeConfig.DataSource.CosmosDbNoSql!; + if (cosmosDbNoSql is null) { - throw new NotSupportedException("CosmosDB is specified but no CosmosDB configuration information has been provided."); + throw new NotSupportedException("CosmosDB_NoSql is specified but no CosmosDB_NoSql configuration information has been provided."); } - if (string.IsNullOrEmpty(runtimeConfig.CosmosDb.GraphQLSchema)) + if (string.IsNullOrEmpty(cosmosDbNoSql.GraphQLSchema)) { - if (string.IsNullOrEmpty(runtimeConfig.CosmosDb.GraphQLSchemaPath)) + if (string.IsNullOrEmpty(cosmosDbNoSql.GraphQLSchemaPath)) { - throw new NotSupportedException("No GraphQL schema file has been provided for CosmosDB. Ensure you provide a GraphQL schema containing the GraphQL object types to expose."); + throw new NotSupportedException("No GraphQL schema file has been provided for CosmosDB_NoSql. Ensure you provide a GraphQL schema containing the GraphQL object types to expose."); } - if (!fileSystem.File.Exists(runtimeConfig.CosmosDb.GraphQLSchemaPath)) + if (!fileSystem.File.Exists(cosmosDbNoSql.GraphQLSchemaPath)) { - throw new FileNotFoundException($"The GraphQL schema file at '{runtimeConfig.CosmosDb.GraphQLSchemaPath}' could not be found. Ensure that it is a path relative to the runtime."); + throw new FileNotFoundException($"The GraphQL schema file at '{cosmosDbNoSql.GraphQLSchemaPath}' could not be found. Ensure that it is a path relative to the runtime."); } } }