Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Uvicorn Integration #219

Merged
merged 24 commits into from
Nov 13, 2024

Merge branch 'main' into 207-uvicorn

7afdd82
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Merged

Add Uvicorn Integration #219

Merge branch 'main' into 207-uvicorn
7afdd82
Select commit
Loading
Failed to load commit list.
GitHub Actions / .NET Test report windows-latest succeeded Nov 13, 2024 in 0s

166 passed, 0 failed and 21 skipped

Tests passed successfully

Report Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.Tests-net8.0.trx 4✔️ 16s
CommunityToolkit.Aspire.Hosting.Azure.StaticWebApps.Tests-net8.0.trx 11✔️ 70s
CommunityToolkit.Aspire.Hosting.Deno.Tests-net8.0.trx 4✔️ 32s
CommunityToolkit.Aspire.Hosting.Golang.Tests-net8.0.trx 2✔️ 164s
CommunityToolkit.Aspire.Hosting.Java.Tests-net8.0.trx 16✔️ 15s
CommunityToolkit.Aspire.Hosting.Meilisearch.Tests-net8.0.trx 10✔️ 22s
CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests-net8.0.trx 12✔️ 57s
CommunityToolkit.Aspire.Hosting.Ollama.Tests-net8.0.trx 31✔️ 35s
CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests-net8.0.trx 2✔️ 47s
CommunityToolkit.Aspire.Hosting.Rust.Tests-net8.0.trx 6✔️ 132s
CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.Tests-net8.0.trx 3✔️ 67s
CommunityToolkit.Aspire.Meilisearch.Tests-net8.0.trx 29✔️ 8✖️ 22s
CommunityToolkit.Aspire.OllamaSharp.Tests-net8.0.trx 36✔️ 13✖️ 11s

✔️ CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.Tests-net8.0.trx

4 tests were completed in 16s with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.Tests.ContainerResourceCreationTests 4✔️ 1s

✔️ CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.Tests.ContainerResourceCreationTests

✔️ AddDataAPIBuilderBuilderShouldNotBeNull
✔️ AddDataApiBuilderConfigFilePathShouldNotBeNullOrWhiteSpace
✔️ AddDataAPIBuilderContainerDetailsSetOnResource
✔️ AddDataApiBuilderNameShouldNotBeNullOrWhiteSpace

✔️ CommunityToolkit.Aspire.Hosting.Azure.StaticWebApps.Tests-net8.0.trx

11 tests were completed in 70s with 11 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Azure.StaticWebApps.Tests.ResourceCreationTests 9✔️ 299ms
CommunityToolkit.Aspire.Hosting.Azure.StaticWebApps.Tests.SwaHostingComponentTests 2✔️ 15s

✔️ CommunityToolkit.Aspire.Hosting.Azure.StaticWebApps.Tests.ResourceCreationTests

✔️ ApiResource_Can_Be_Set
✔️ ApiResourceWillBeWaitedFor
✔️ AppResource_Can_Be_Set
✔️ AppResourceWillBeWaitedFor
✔️ Port_Will_Be_An_Arg
✔️ Start_Will_Be_An_Arg
✔️ SwaResourceHasHealthCheck
✔️ TargetPort_Can_Be_Overridden
✔️ TargetPort_Defaults_to_4280

✔️ CommunityToolkit.Aspire.Hosting.Azure.StaticWebApps.Tests.SwaHostingComponentTests

✔️ CanAccessApiSuccessfully
✔️ CanAccessFrontendSuccessfully

✔️ CommunityToolkit.Aspire.Hosting.Deno.Tests-net8.0.trx

4 tests were completed in 32s with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Deno.Tests.AppHostTests 2✔️ 4s
CommunityToolkit.Aspire.Hosting.Deno.Tests.ResourceCreationTests 2✔️ 171ms

✔️ CommunityToolkit.Aspire.Hosting.Deno.Tests.AppHostTests

✔️ ApiResourceStartsAndRespondsOk
✔️ ResourceStartsAndRespondsOk

✔️ CommunityToolkit.Aspire.Hosting.Deno.Tests.ResourceCreationTests

✔️ DenoAppUsesDenoCommand
✔️ DenoTaskUsesDenoCommand

✔️ CommunityToolkit.Aspire.Hosting.Golang.Tests-net8.0.trx

2 tests were completed in 164s with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Golang.Extensions.Tests.ResourceCreationTests 1✔️ 183ms
CommunityToolkit.Aspire.Hosting.Golang.Tests.AppHostTests 1✔️ 126s

✔️ CommunityToolkit.Aspire.Hosting.Golang.Extensions.Tests.ResourceCreationTests

✔️ DefaultGolangApp

✔️ CommunityToolkit.Aspire.Hosting.Golang.Tests.AppHostTests

✔️ ResourceStartsAndRespondsOk

✔️ CommunityToolkit.Aspire.Hosting.Java.Tests-net8.0.trx

16 tests were completed in 15s with 16 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Java.Tests.ContainerResourceCreationTests 8✔️ 187ms
CommunityToolkit.Aspire.Hosting.Java.Tests.ExecutableResourceCreationTests 8✔️ 191ms

✔️ CommunityToolkit.Aspire.Hosting.Java.Tests.ContainerResourceCreationTests

✔️ AddJavaAppBuilderShouldNotBeNull
✔️ AddJavaAppContainerDetailsSetOnResource
✔️ AddJavaAppContainerImageNameShouldNotBeNullOrWhiteSpace
✔️ AddJavaAppContainerResourceOptionsShouldNotBeNull
✔️ AddJavaAppNameShouldNotBeNullOrWhiteSpace
✔️ AddSpringAppBuilderShouldNotBeNull
✔️ AddSpringAppContainerResourceOptionsShouldNotBeNull
✔️ AddSpringAppNameShouldNotBeNullOrWhiteSpace

✔️ CommunityToolkit.Aspire.Hosting.Java.Tests.ExecutableResourceCreationTests

✔️ AddJavaAppBuilderShouldNotBeNull
✔️ AddJavaAppContainerDetailsSetOnResource
✔️ AddJavaAppExecutableResourceOptionsShouldNotBeNull
✔️ AddJavaAppNameShouldNotBeNullOrWhiteSpace
✔️ AddJavaAppWorkingDirectoryShouldNotBeNullOrWhiteSpace
✔️ AddSpringAppBuilderShouldNotBeNull
✔️ AddSpringAppContainerResourceOptionsShouldNotBeNull
✔️ AddSpringAppNameShouldNotBeNullOrWhiteSpace

✔️ CommunityToolkit.Aspire.Hosting.Meilisearch.Tests-net8.0.trx

10 tests were completed in 22s with 10 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Meilisearch.Tests.AddMeilisearchTests 3✔️ 290ms
CommunityToolkit.Aspire.Hosting.Meilisearch.Tests.MeilisearchPublicApiTests 7✔️ 175ms

✔️ CommunityToolkit.Aspire.Hosting.Meilisearch.Tests.AddMeilisearchTests

✔️ AddMeilisearchContainerAddsAnnotationMetadata
✔️ AddMeilisearchContainerWithDefaultsAddsAnnotationMetadata
✔️ MeilisearchCreatesConnectionString

✔️ CommunityToolkit.Aspire.Hosting.Meilisearch.Tests.MeilisearchPublicApiTests

✔️ AddMeilisearchContainerShouldThrowWhenBuilderIsNull
✔️ AddMeilisearchContainerShouldThrowWhenNameIsNull
✔️ CtorMeilisearchResourceShouldThrowWhenMasterKeyIsNull
✔️ CtorMeilisearchResourceShouldThrowWhenNameIsNull
✔️ WithDataBindMountShouldThrowWhenSourceIsNull
✔️ WithDataShouldThrowWhenBuilderIsNull(useVolume: False)
✔️ WithDataShouldThrowWhenBuilderIsNull(useVolume: True)

✔️ CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests-net8.0.trx

12 tests were completed in 57s with 12 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests.AppHostTests 3✔️ 4s
CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests.ResourceCreationTests 9✔️ 309ms

✔️ CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests.AppHostTests

✔️ ResourceStartsAndRespondsOk(appName: "pnpm-demo")
✔️ ResourceStartsAndRespondsOk(appName: "vite-demo")
✔️ ResourceStartsAndRespondsOk(appName: "yarn-demo")

✔️ CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests.ResourceCreationTests

✔️ DefaultViteAppUsesNpm
✔️ PnpmAppUsesPnpmCommand
✔️ ViteAppHasExposedExternalHttpEndpoints
✔️ ViteAppHasExposedHttpEndpoints
✔️ ViteAppUsesSpecifiedPackageManager(packageManager: "npm")
✔️ ViteAppUsesSpecifiedPackageManager(packageManager: "pnpm")
✔️ ViteAppUsesSpecifiedPackageManager(packageManager: "yarn")
✔️ ViteAppUsesSpecifiedWorkingDirectory
✔️ YarnAppUsesYarnCommand

✔️ CommunityToolkit.Aspire.Hosting.Ollama.Tests-net8.0.trx

31 tests were completed in 35s with 31 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Ollama.Tests.AddOllamaTests 31✔️ 674ms

✔️ CommunityToolkit.Aspire.Hosting.Ollama.Tests.AddOllamaTests

✔️ CanPersistVolumeOfOpenWebUI(volumeName: "volumeName")
✔️ CanPersistVolumeOfOpenWebUI(volumeName: null)
✔️ CanSetMultpleModels
✔️ CorrectTargetPathOnVolumeMount(volumeName: "data")
✔️ CorrectTargetPathOnVolumeMount(volumeName: null)
✔️ DistributedApplicationBuilderCannotBeNull
✔️ HuggingFaceModel(modelName: "hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF:IQ4_XS")
✔️ HuggingFaceModel(modelName: "hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF:IQ4_XS@"···)
✔️ HuggingFaceModel(modelName: "huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGU"···)
✔️ HuggingFaceModel(modelName: "huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGU"···)
✔️ HuggingFaceModelWithoutDomainPrefixHasItAdded
✔️ ModelNameCannotBeOmmitted
✔️ NoDataVolumeNameGeneratesOne
✔️ OllamaModelResourceCommandsUpdateState(commandType: "Delete")
✔️ OllamaModelResourceCommandsUpdateState(commandType: "ModelInfo")
✔️ OllamaModelResourceCommandsUpdateState(commandType: "Redownload")
✔️ OllamaModelResourceCommandsUpdateState(commandType: "Stop")
✔️ OllamaModelResourceRegistersCustomHealthCheck
✔️ OllamaModelResourceRegistersResourceCommandAnnotations
✔️ OllamaRegistersHttpHealthCheck
✔️ OllamaRegistrationContainsResourceCommandAnnotations
✔️ OllamaResourceCommandsUpdateState(commandType: "ListAllModels")
✔️ OllamaResourceCommandsUpdateState(commandType: "ListRunningModels")
✔️ OpenWebUIConfigured
✔️ ReadOnlyVolumeMount(isReadOnly: False)
✔️ ReadOnlyVolumeMount(isReadOnly: True)
✔️ ResourceNameCannotBeOmitted
✔️ SpecifiedDataVolumeNameIsUsed
✔️ VerifyCustomModel
✔️ VerifyCustomPort
✔️ VerifyDefaultPort

✔️ CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests-net8.0.trx

2 tests were completed in 47s with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests.AppHostTests 1✔️ 34s
CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests.ResourceCreationTests 1✔️ 123ms

✔️ CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests.AppHostTests

✔️ ResourceStartsAndRespondsOk

✔️ CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests.ResourceCreationTests

✔️ DefaultUvicornApp

✔️ CommunityToolkit.Aspire.Hosting.Rust.Tests-net8.0.trx

6 tests were completed in 132s with 6 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.Rust.Tests.AddRustAppTests 2✔️ 167ms
CommunityToolkit.Aspire.Hosting.Rust.Tests.AppHostTests 1✔️ 117s
CommunityToolkit.Aspire.Hosting.Rust.Tests.RustAppPublicApiTests 3✔️ 73ms

✔️ CommunityToolkit.Aspire.Hosting.Rust.Tests.AddRustAppTests

✔️ AddRustAppAddsAnnotationMetadata
✔️ AddRustAppWithArgsAddsAnnotationMetadata

✔️ CommunityToolkit.Aspire.Hosting.Rust.Tests.AppHostTests

✔️ ResourceStartsAndRespondsOk

✔️ CommunityToolkit.Aspire.Hosting.Rust.Tests.RustAppPublicApiTests

✔️ AddRustAppShouldThrowWhenBuilderIsNull
✔️ AddRustAppShouldThrowWhenNameIsNull
✔️ AddRustAppShouldThrowWorkingDirectoryIsNull

✔️ CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.Tests-net8.0.trx

3 tests were completed in 67s with 3 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.Tests.AddSqlProjectTests 3✔️ 52s

✔️ CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.Tests.AddSqlProjectTests

✔️ AddSqlProject_WithExplicitPath
✔️ AddSqlProject_WithProjectMetadata
✔️ PublishTo_AddsRequiredServices

✔️ CommunityToolkit.Aspire.Meilisearch.Tests-net8.0.trx

37 tests were completed in 22s with 29 passed, 0 failed and 8 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.Meilisearch.Tests.AspireMeilisearchClientExtensionsTest 4✔️ 450ms
CommunityToolkit.Aspire.Meilisearch.Tests.ConfigurationTests 3✔️ 6ms
CommunityToolkit.Aspire.Meilisearch.Tests.ConformanceTests 16✔️ 8✖️ 9s
CommunityToolkit.Aspire.Meilisearch.Tests.MeilisearchClientPublicApiTests 6✔️ 28ms

✔️ CommunityToolkit.Aspire.Meilisearch.Tests.AspireMeilisearchClientExtensionsTest

✔️ AddMeilisearchClient_HealthCheckShouldNotBeRegisteredWhenDisabled(useKeyed: False)
✔️ AddMeilisearchClient_HealthCheckShouldNotBeRegisteredWhenDisabled(useKeyed: True)
✔️ CanAddClientFromEncodedConnectionString
✔️ CanAddMultipleKeyedServices

✔️ CommunityToolkit.Aspire.Meilisearch.Tests.ConfigurationTests

✔️ EndpointIsNullByDefault
✔️ HealthChecksEnabledByDefault
✔️ MasterKeyIsNullByDefault

✔️ CommunityToolkit.Aspire.Meilisearch.Tests.ConformanceTests

✔️ CanRegisterMultipleInstancesUsingDifferentKeys
✖️ ConfigurationSchemaInvalidJsonConfigTest
✖️ ConfigurationSchemaValidJsonConfigTest
✔️ ConnectionInformationIsDelayValidated(useKey: False)
✔️ ConnectionInformationIsDelayValidated(useKey: True)
✔️ EachKeyedComponentRegistersItsOwnHealthCheck
✖️ FavorsNamedConfigurationOverTopLevelConfigurationWhenBothProvided_DisableHealthChecks
✖️ FavorsNamedConfigurationOverTopLevelConfigurationWhenBothProvided_DisableTracing
✔️ HealthCheckReportsExpectedStatus(key: "key")
✔️ HealthCheckReportsExpectedStatus(key: null)
✔️ HealthChecksRegistersHealthCheckService(enabled: False)
✔️ HealthChecksRegistersHealthCheckService(enabled: True)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: False, useKey: False)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: False, useKey: True)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: True, useKey: False)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: True, useKey: True)
✖️ MetricsRegistersMeterProvider(enabled: False)
✖️ MetricsRegistersMeterProvider(enabled: True)
✔️ OptionsTypeIsSealed
✔️ ServiceLifetimeIsAsExpected(useKey: False)
✔️ ServiceLifetimeIsAsExpected(useKey: True)
✖️ TracingRegistersTraceProvider(enabled: False)
✖️ TracingRegistersTraceProvider(enabled: True)
✔️ WhenKeyedRegistrationIsUsedThenItsImpossibleToResolveWithoutKey

✔️ CommunityToolkit.Aspire.Meilisearch.Tests.MeilisearchClientPublicApiTests

✔️ AddKeyedMeilisearchClientShouldThrowWhenBuilderIsNull
✔️ AddKeyedMeilisearchClientShouldThrowWhenNameIsEmpty
✔️ AddKeyedMeilisearchClientShouldThrowWhenNameIsNull
✔️ AddMeilisearchClientShouldThrowWhenBuilderIsNull
✔️ AddMeilisearchClientShouldThrowWhenNameIsEmpty
✔️ AddMeilisearchClientShouldThrowWhenNameIsNull

✔️ CommunityToolkit.Aspire.OllamaSharp.Tests-net8.0.trx

49 tests were completed in 11s with 36 passed, 0 failed and 13 skipped.

Test suite Passed Failed Skipped Time
CommunityToolkit.Aspire.OllamaSharp.Tests.ConfigurationTests 4✔️ 3ms
CommunityToolkit.Aspire.OllamaSharp.Tests.ConformanceTests 11✔️ 13✖️ 585ms
CommunityToolkit.Aspire.OllamaSharp.Tests.OllamaApiClientTests 7✔️ 386ms
CommunityToolkit.Aspire.OllamaSharp.Tests.OllamaSharpIChatClientTests 7✔️ 386ms
CommunityToolkit.Aspire.OllamaSharp.Tests.OllamaSharpIEmbeddingGeneratorTests 7✔️ 67ms

✔️ CommunityToolkit.Aspire.OllamaSharp.Tests.ConfigurationTests

✔️ EndpointIsNullByDefault
✔️ HealthChecksEnabledByDefault
✔️ ModelsIsEmptyByDefault
✔️ SelectedModelIsNullByDefault

✔️ CommunityToolkit.Aspire.OllamaSharp.Tests.ConformanceTests

✔️ CanRegisterMultipleInstancesUsingDifferentKeys
✖️ ConfigurationSchemaInvalidJsonConfigTest
✖️ ConfigurationSchemaValidJsonConfigTest
✔️ ConnectionInformationIsDelayValidated(useKey: False)
✔️ ConnectionInformationIsDelayValidated(useKey: True)
✖️ EachKeyedComponentRegistersItsOwnHealthCheck
✖️ FavorsNamedConfigurationOverTopLevelConfigurationWhenBothProvided_DisableHealthChecks
✖️ FavorsNamedConfigurationOverTopLevelConfigurationWhenBothProvided_DisableTracing
✖️ HealthCheckReportsExpectedStatus(key: "key")
✖️ HealthCheckReportsExpectedStatus(key: null)
✖️ HealthChecksRegistersHealthCheckService(enabled: False)
✖️ HealthChecksRegistersHealthCheckService(enabled: True)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: False, useKey: False)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: False, useKey: True)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: True, useKey: False)
✔️ LoggerFactoryIsUsedByRegisteredClient(registerAfterLoggerFactory: True, useKey: True)
✖️ MetricsRegistersMeterProvider(enabled: False)
✖️ MetricsRegistersMeterProvider(enabled: True)
✔️ OptionsTypeIsSealed
✔️ ServiceLifetimeIsAsExpected(useKey: False)
✔️ ServiceLifetimeIsAsExpected(useKey: True)
✖️ TracingRegistersTraceProvider(enabled: False)
✖️ TracingRegistersTraceProvider(enabled: True)
✔️ WhenKeyedRegistrationIsUsedThenItsImpossibleToResolveWithoutKey

✔️ CommunityToolkit.Aspire.OllamaSharp.Tests.OllamaApiClientTests

✔️ CanSetConnectionStringInCode(useKeyed: False)
✔️ CanSetConnectionStringInCode(useKeyed: True)
✔️ CanSetMultipleKeyedClients
✔️ ConnectionStringWinsOverConfigSection(useKeyed: False)
✔️ ConnectionStringWinsOverConfigSection(useKeyed: True)
✔️ ReadsFromConnectionStringCorrectly(useKeyed: False)
✔️ ReadsFromConnectionStringCorrectly(useKeyed: True)

✔️ CommunityToolkit.Aspire.OllamaSharp.Tests.OllamaSharpIChatClientTests

✔️ CanSetConnectionStringInCode(useKeyed: False)
✔️ CanSetConnectionStringInCode(useKeyed: True)
✔️ CanSetMultipleKeyedClients
✔️ ConnectionStringWinsOverConfigSection(useKeyed: False)
✔️ ConnectionStringWinsOverConfigSection(useKeyed: True)
✔️ ReadsFromConnectionStringCorrectly(useKeyed: False)
✔️ ReadsFromConnectionStringCorrectly(useKeyed: True)

✔️ CommunityToolkit.Aspire.OllamaSharp.Tests.OllamaSharpIEmbeddingGeneratorTests

✔️ CanSetConnectionStringInCode(useKeyed: False)
✔️ CanSetConnectionStringInCode(useKeyed: True)
✔️ CanSetMultipleKeyedClients
✔️ ConnectionStringWinsOverConfigSection(useKeyed: False)
✔️ ConnectionStringWinsOverConfigSection(useKeyed: True)
✔️ ReadsFromConnectionStringCorrectly(useKeyed: False)
✔️ ReadsFromConnectionStringCorrectly(useKeyed: True)