chore: import upstream snapshot with attribution
This commit is contained in:
+48
@@ -0,0 +1,48 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
using Docker.DotNet.Models;
|
||||
using DotNet.Testcontainers.Builders;
|
||||
using DotNet.Testcontainers.Configurations;
|
||||
|
||||
namespace Weaviate.ConformanceTests.Support.TestContainer;
|
||||
|
||||
public sealed class WeaviateBuilder : ContainerBuilder<WeaviateBuilder, WeaviateContainer, WeaviateConfiguration>
|
||||
{
|
||||
public const string WeaviateImage = "semitechnologies/weaviate:1.28.12";
|
||||
public const ushort WeaviateHttpPort = 8080;
|
||||
public const ushort WeaviateGrpcPort = 50051;
|
||||
|
||||
public WeaviateBuilder() : this(new WeaviateConfiguration()) => this.DockerResourceConfiguration = this.Init().DockerResourceConfiguration;
|
||||
|
||||
private WeaviateBuilder(WeaviateConfiguration dockerResourceConfiguration) : base(dockerResourceConfiguration)
|
||||
=> this.DockerResourceConfiguration = dockerResourceConfiguration;
|
||||
|
||||
public override WeaviateContainer Build()
|
||||
{
|
||||
this.Validate();
|
||||
return new WeaviateContainer(this.DockerResourceConfiguration);
|
||||
}
|
||||
|
||||
protected override WeaviateBuilder Init()
|
||||
=> base.Init()
|
||||
.WithImage(WeaviateImage)
|
||||
.WithPortBinding(WeaviateHttpPort, true)
|
||||
.WithPortBinding(WeaviateGrpcPort, true)
|
||||
.WithEnvironment("AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED", "true")
|
||||
.WithEnvironment("PERSISTENCE_DATA_PATH", "/var/lib/weaviate")
|
||||
.WithWaitStrategy(Wait.ForUnixContainer()
|
||||
.UntilInternalTcpPortIsAvailable(WeaviateHttpPort)
|
||||
.UntilInternalTcpPortIsAvailable(WeaviateGrpcPort)
|
||||
.UntilHttpRequestIsSucceeded(r => r.ForPath("/v1/.well-known/ready").ForPort(WeaviateHttpPort)));
|
||||
|
||||
protected override WeaviateBuilder Clone(IResourceConfiguration<CreateContainerParameters> resourceConfiguration)
|
||||
=> this.Merge(this.DockerResourceConfiguration, new WeaviateConfiguration(resourceConfiguration));
|
||||
|
||||
protected override WeaviateBuilder Merge(WeaviateConfiguration oldValue, WeaviateConfiguration newValue)
|
||||
=> new(new WeaviateConfiguration(oldValue, newValue));
|
||||
|
||||
protected override WeaviateConfiguration DockerResourceConfiguration { get; }
|
||||
|
||||
protected override WeaviateBuilder Clone(IContainerConfiguration resourceConfiguration)
|
||||
=> this.Merge(this.DockerResourceConfiguration, new WeaviateConfiguration(resourceConfiguration));
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
using Docker.DotNet.Models;
|
||||
using DotNet.Testcontainers.Configurations;
|
||||
|
||||
namespace Weaviate.ConformanceTests.Support.TestContainer;
|
||||
|
||||
public sealed class WeaviateConfiguration : ContainerConfiguration
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WeaviateConfiguration" /> class.
|
||||
/// </summary>
|
||||
public WeaviateConfiguration()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WeaviateConfiguration" /> class.
|
||||
/// </summary>
|
||||
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
|
||||
public WeaviateConfiguration(IResourceConfiguration<CreateContainerParameters> resourceConfiguration)
|
||||
: base(resourceConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WeaviateConfiguration" /> class.
|
||||
/// </summary>
|
||||
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
|
||||
public WeaviateConfiguration(IContainerConfiguration resourceConfiguration)
|
||||
: base(resourceConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WeaviateConfiguration" /> class.
|
||||
/// </summary>
|
||||
/// <param name="resourceConfiguration">The Docker resource configuration.</param>
|
||||
public WeaviateConfiguration(WeaviateConfiguration resourceConfiguration)
|
||||
: this(new WeaviateConfiguration(), resourceConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WeaviateConfiguration" /> class.
|
||||
/// </summary>
|
||||
/// <param name="oldValue">The old Docker resource configuration.</param>
|
||||
/// <param name="newValue">The new Docker resource configuration.</param>
|
||||
public WeaviateConfiguration(WeaviateConfiguration oldValue, WeaviateConfiguration newValue)
|
||||
: base(oldValue, newValue)
|
||||
{
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
using DotNet.Testcontainers.Containers;
|
||||
|
||||
namespace Weaviate.ConformanceTests.Support.TestContainer;
|
||||
|
||||
public class WeaviateContainer(WeaviateConfiguration configuration) : DockerContainer(configuration);
|
||||
@@ -0,0 +1,41 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
#if NET472
|
||||
using System.Net.Http;
|
||||
#endif
|
||||
using Microsoft.SemanticKernel.Connectors.Weaviate;
|
||||
using VectorData.ConformanceTests.Support;
|
||||
using Weaviate.ConformanceTests.Support.TestContainer;
|
||||
|
||||
namespace Weaviate.ConformanceTests.Support;
|
||||
|
||||
#pragma warning restore CA2213 // Disposable fields should be disposed
|
||||
|
||||
public sealed class WeaviateTestStore : TestStore
|
||||
{
|
||||
public static WeaviateTestStore NamedVectorsInstance { get; } = new(hasNamedVectors: true);
|
||||
public static WeaviateTestStore UnnamedVectorInstance { get; } = new(hasNamedVectors: false);
|
||||
|
||||
public override string DefaultDistanceFunction => Microsoft.Extensions.VectorData.DistanceFunction.CosineDistance;
|
||||
|
||||
private readonly WeaviateContainer _container = new WeaviateBuilder().Build();
|
||||
private readonly bool _hasNamedVectors;
|
||||
public HttpClient? _httpClient { get; private set; }
|
||||
|
||||
public HttpClient Client => this._httpClient ?? throw new InvalidOperationException("Not initialized");
|
||||
|
||||
public WeaviateVectorStore GetVectorStore(WeaviateVectorStoreOptions options)
|
||||
=> new(this.Client, options);
|
||||
|
||||
private WeaviateTestStore(bool hasNamedVectors) => this._hasNamedVectors = hasNamedVectors;
|
||||
|
||||
protected override async Task StartAsync()
|
||||
{
|
||||
await this._container.StartAsync();
|
||||
this._httpClient = new HttpClient { BaseAddress = new Uri($"http://localhost:{this._container.GetMappedPublicPort(WeaviateBuilder.WeaviateHttpPort)}/v1/") };
|
||||
this.DefaultVectorStore = new WeaviateVectorStore(this._httpClient, new() { HasNamedVectors = this._hasNamedVectors });
|
||||
}
|
||||
|
||||
protected override Task StopAsync()
|
||||
=> this._container.StopAsync();
|
||||
}
|
||||
Reference in New Issue
Block a user