Skip to main content

Writing Unit Tests

Example

using k8s.Models;
using Neon.Operator.Xunit;
using Xunit;

public class Test_Operator : IClassFixture<TestOperatorFixture>
{
private TestOperatorFixture fixture;

public Test_Operator(TestOperatorFixture fixture)
{
this.fixture = fixture;
fixture.Operator.AddController<TestDatabaseController>();
fixture.RegisterType<V1StatefulSet>();
fixture.RegisterType<V1Service>();
fixture.Start();
}

[Fact]
public async Task CreateStatefulSetAsync()
{
fixture.ClearResources();

var controller = fixture.Operator.GetController<TestDatabaseController>();

var resource = new V1TestDatabase()
{
Metadata = new V1ObjectMeta()
{
Name = "test-database",
NamespaceProperty = "test"
},
Spec = new TestDatabaseSpec()
{
Image = "foo/bar:latest",
Servers = 3,
VolumeSize = "1Gi"
}
};

await controller.ReconcileAsync(resource);

var statefulsets = fixture.Resources.OfType<V1StatefulSet>();
var services = fixture.Resources.OfType<V1Service>();

Assert.Equal(2, fixture.Resources.Count);

// verify statefulset
Assert.Contains(statefulsets, r => r.Metadata.Name == resource.Name());
Assert.Equal(resource.Spec.Servers, statefulsets.Single().Spec.Replicas);

// verify service
Assert.Contains(services, r => r.Metadata.Name == resource.Name());
}
}