Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion schemas/dab.draft.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,40 @@
"ttl-seconds": {
"type": "integer",
"description": "Time to live in seconds",
"default": 5
"default": 5,
"minimum": 1
},
"level-2": {
"type": "object",
"description": "Configuration for the level 2 (distributed) cache and backplane.",
"additionalProperties": false,
"properties": {
"enabled": {
"$ref": "#/$defs/boolean-or-string",
"description": "Enable or disable the level 2 distributed cache.",
"default": false
},
"provider": {
"type": "string",
"description": "The provider for the L2 cache. Currently only 'redis' is supported."
},
"connection-string": {
"type": "string",
"description": "The connection string for the level 2 cache provider."
},
"partition": {
"type": "string",
"description": "The prefix to use for cache keys in level 2 and backplane, useful in a shared environment to avoid collisions."
}
},
"if": {
"properties": {
"enabled": { "const": true }
}
},
"then": {
"required": ["connection-string"]
}
}
}
},
Expand Down
6 changes: 3 additions & 3 deletions src/Cli.Tests/ConfigureOptionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,7 @@ public void TestDatabaseTypeUpdate(string dbType)
string updatedConfig = _fileSystem!.File.ReadAllText(TEST_RUNTIME_CONFIG_FILE);
Assert.IsTrue(RuntimeConfigLoader.TryParseConfig(updatedConfig, out RuntimeConfig? config));
Assert.IsNotNull(config.Runtime);
Assert.AreEqual(config.DataSource.DatabaseType, Enum.Parse<DatabaseType>(dbType, ignoreCase: true));
Assert.AreEqual(config.DataSource!.DatabaseType, Enum.Parse<DatabaseType>(dbType, ignoreCase: true));
}

/// <summary>
Expand Down Expand Up @@ -841,7 +841,7 @@ public void TestDatabaseTypeUpdateCosmosDB_NoSQLToMSSQL()
string updatedConfig = _fileSystem!.File.ReadAllText(TEST_RUNTIME_CONFIG_FILE);
Assert.IsTrue(RuntimeConfigLoader.TryParseConfig(updatedConfig, out RuntimeConfig? config));
Assert.IsNotNull(config.Runtime);
Assert.AreEqual(config.DataSource.DatabaseType, DatabaseType.MSSQL);
Assert.AreEqual(config.DataSource!.DatabaseType, DatabaseType.MSSQL);
Assert.AreEqual(config.DataSource.Options!.GetValueOrDefault("set-session-context", false), true);
Assert.IsFalse(config.DataSource.Options!.ContainsKey("database"));
Assert.IsFalse(config.DataSource.Options!.ContainsKey("container"));
Expand Down Expand Up @@ -877,7 +877,7 @@ public void TestDatabaseTypeUpdateMSSQLToCosmosDB_NoSQL()
string updatedConfig = _fileSystem!.File.ReadAllText(TEST_RUNTIME_CONFIG_FILE);
Assert.IsTrue(RuntimeConfigLoader.TryParseConfig(updatedConfig, out RuntimeConfig? config));
Assert.IsNotNull(config.Runtime);
Assert.AreEqual(config.DataSource.DatabaseType, DatabaseType.CosmosDB_NoSQL);
Assert.AreEqual(config.DataSource!.DatabaseType, DatabaseType.CosmosDB_NoSQL);
Assert.AreEqual(config.DataSource.Options!.GetValueOrDefault("database"), "testdb");
Assert.AreEqual(config.DataSource.Options!.GetValueOrDefault("container"), "testcontainer");
Assert.AreEqual(config.DataSource.Options!.GetValueOrDefault("schema"), "testschema.gql");
Expand Down
14 changes: 5 additions & 9 deletions src/Cli.Tests/EndToEndTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public Task TestInitForCosmosDBNoSql()

Assert.IsNotNull(runtimeConfig);
Assert.IsTrue(runtimeConfig.AllowIntrospection);
Assert.AreEqual(DatabaseType.CosmosDB_NoSQL, runtimeConfig.DataSource.DatabaseType);
Assert.AreEqual(DatabaseType.CosmosDB_NoSQL, runtimeConfig.DataSource!.DatabaseType);
CosmosDbNoSQLDataSourceOptions? cosmosDataSourceOptions = runtimeConfig.DataSource.GetTypedOptions<CosmosDbNoSQLDataSourceOptions>();
Assert.IsNotNull(cosmosDataSourceOptions);
Assert.AreEqual("graphqldb", cosmosDataSourceOptions.Database);
Expand Down Expand Up @@ -93,7 +93,7 @@ public void TestInitForCosmosDBPostgreSql()
Assert.IsTrue(_runtimeConfigLoader!.TryLoadConfig(TEST_RUNTIME_CONFIG_FILE, out RuntimeConfig? runtimeConfig));

Assert.IsNotNull(runtimeConfig);
Assert.AreEqual(DatabaseType.CosmosDB_PostgreSQL, runtimeConfig.DataSource.DatabaseType);
Assert.AreEqual(DatabaseType.CosmosDB_PostgreSQL, runtimeConfig.DataSource!.DatabaseType);
Assert.IsNotNull(runtimeConfig.Runtime);
Assert.IsNotNull(runtimeConfig.Runtime.Rest);
Assert.AreEqual("/rest-api", runtimeConfig.Runtime.Rest.Path);
Expand Down Expand Up @@ -124,7 +124,7 @@ public void TestInitializingRestAndGraphQLGlobalSettings()
out RuntimeConfig? runtimeConfig,
replacementSettings: replacementSettings));

SqlConnectionStringBuilder builder = new(runtimeConfig.DataSource.ConnectionString);
SqlConnectionStringBuilder builder = new(runtimeConfig.DataSource!.ConnectionString);
Assert.AreEqual(ProductInfo.GetDataApiBuilderUserAgent(), builder.ApplicationName);

Assert.IsNotNull(runtimeConfig);
Expand Down Expand Up @@ -205,7 +205,7 @@ public void TestEnablingMultipleCreateOperation(CliBool isMultipleCreateEnabled,
replacementSettings: replacementSettings));

Assert.IsNotNull(runtimeConfig);
Assert.AreEqual(expectedDbType, runtimeConfig.DataSource.DatabaseType);
Assert.AreEqual(expectedDbType, runtimeConfig.DataSource!.DatabaseType);
Assert.IsNotNull(runtimeConfig.Runtime);
Assert.IsNotNull(runtimeConfig.Runtime.GraphQL);
if (runtimeConfig.DataSource.DatabaseType is DatabaseType.MSSQL && isMultipleCreateEnabled is not CliBool.None)
Expand Down Expand Up @@ -244,7 +244,7 @@ public void TestAddEntity()

Assert.IsTrue(_runtimeConfigLoader!.TryLoadConfig(TEST_RUNTIME_CONFIG_FILE, out RuntimeConfig? addRuntimeConfig));
Assert.IsNotNull(addRuntimeConfig);
Assert.AreEqual(TEST_ENV_CONN_STRING, addRuntimeConfig.DataSource.ConnectionString);
Assert.AreEqual(TEST_ENV_CONN_STRING, addRuntimeConfig.DataSource!.ConnectionString);
Assert.AreEqual(1, addRuntimeConfig.Entities.Count()); // 1 new entity added
Assert.IsTrue(addRuntimeConfig.Entities.ContainsKey("todo"));
Entity entity = addRuntimeConfig.Entities["todo"];
Expand Down Expand Up @@ -1173,10 +1173,6 @@ public async Task TestExitOfRuntimeEngineWithInvalidConfig(
Assert.IsNotNull(output);
StringAssert.Contains(output, $"Deserialization of the configuration file failed.", StringComparison.Ordinal);

output = await process.StandardOutput.ReadLineAsync();
Assert.IsNotNull(output);
StringAssert.Contains(output, $"Error: Failed to parse the config file: {TEST_RUNTIME_CONFIG_FILE}.", StringComparison.Ordinal);

output = await process.StandardOutput.ReadLineAsync();
Assert.IsNotNull(output);
StringAssert.Contains(output, $"Failed to start the engine.", StringComparison.Ordinal);
Expand Down
4 changes: 2 additions & 2 deletions src/Cli.Tests/EnvironmentTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,8 @@ public async Task FailureToStartEngineWhenEnvVarNamedWrong()
);

string? output = await process.StandardError.ReadLineAsync();
Assert.AreEqual("Deserialization of the configuration file failed during a post-processing step.", output);
output = await process.StandardError.ReadToEndAsync();
Assert.IsNotNull(output);
// Clean error message on stderr with no stack trace.
StringAssert.Contains(output, "A valid Connection String should be provided.", StringComparison.Ordinal);
process.Kill();
}
Expand Down
8 changes: 8 additions & 0 deletions src/Cli.Tests/ModuleInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,14 @@ public static void Init()
VerifierSettings.IgnoreMember<DataSource>(dataSource => dataSource.DatabaseTypeNotSupportedMessage);
// Ignore DefaultDataSourceName as that's not serialized in our config file.
VerifierSettings.IgnoreMember<RuntimeConfig>(config => config.DefaultDataSourceName);
// Ignore IsRootConfig as that's a computed property for validation, not serialized.
VerifierSettings.IgnoreMember<RuntimeConfig>(config => config.IsRootConfig);
// Ignore IsChildConfig as that's a runtime flag for validation, not serialized.
VerifierSettings.IgnoreMember<RuntimeConfig>(config => config.IsChildConfig);
// Ignore AutoentityResolutionCounts as that's populated at runtime during metadata initialization.
VerifierSettings.IgnoreMember<RuntimeConfig>(config => config.AutoentityResolutionCounts);
// Ignore ChildConfigs as that's populated at runtime during child config loading.
VerifierSettings.IgnoreMember<RuntimeConfig>(config => config.ChildConfigs);
// Ignore MaxResponseSizeMB as as that's unimportant from a test standpoint.
VerifierSettings.IgnoreMember<HostOptions>(options => options.MaxResponseSizeMB);
// Ignore UserProvidedMaxResponseSizeMB as that's not serialized in our config file.
Expand Down
4 changes: 2 additions & 2 deletions src/Cli.Tests/UserDelegatedAuthRuntimeParsingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public void TestRuntimeCanParseUserDelegatedAuthConfig()
// Assert
Assert.IsTrue(success);
Assert.IsNotNull(config);
Assert.IsNotNull(config.DataSource.UserDelegatedAuth);
Assert.IsNotNull(config.DataSource!.UserDelegatedAuth);
Assert.IsTrue(config.DataSource.UserDelegatedAuth.Enabled);
Assert.AreEqual("https://database.windows.net", config.DataSource.UserDelegatedAuth.DatabaseAudience);
}
Expand Down Expand Up @@ -95,7 +95,7 @@ public void TestRuntimeCanParseConfigWithoutUserDelegatedAuth()
// Assert
Assert.IsTrue(success);
Assert.IsNotNull(config);
Assert.IsNull(config.DataSource.UserDelegatedAuth);
Assert.IsNull(config.DataSource!.UserDelegatedAuth);
}
}
}
Loading