Files
wehub-resource-sync e0e362d700
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
SDK Tests / SDK CI (push) Has been cancelled
SDK Tests / CLI Tests (push) Has been cancelled
SDK Tests / Python SDK Quality (code-interpreter) (push) Has been cancelled
SDK Tests / Python SDK Quality (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (sandbox) (push) Has been cancelled
SDK Tests / CLI Quality (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Go SDK Quality And Tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

227 lines
6.7 KiB
C#

// Copyright 2026 Alibaba Group Holding Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using FluentAssertions;
using OpenSandbox.Config;
using OpenSandbox.Core;
using OpenSandbox.Models;
using Xunit;
namespace OpenSandbox.Tests;
public class OptionsTests
{
[Fact]
public void SandboxCreateOptions_ShouldStoreProperties()
{
// Arrange & Act
var options = new SandboxCreateOptions
{
Image = "ubuntu:latest",
TimeoutSeconds = 600,
Entrypoint = new[] { "bash" },
Env = new Dictionary<string, string> { ["KEY"] = "VALUE" },
Metadata = new Dictionary<string, string> { ["tag"] = "test" },
Platform = new PlatformSpec { Os = "linux", Arch = "arm64" },
Resource = new Dictionary<string, string> { ["cpu"] = "2" },
SkipHealthCheck = true,
ReadyTimeoutSeconds = 60,
HealthCheckPollingInterval = 500
};
// Assert
options.Image.Should().Be("ubuntu:latest");
options.TimeoutSeconds.Should().Be(600);
options.Entrypoint.Should().Contain("bash");
options.Env.Should().ContainKey("KEY");
options.Metadata.Should().ContainKey("tag");
options.Platform.Should().NotBeNull();
options.Platform!.Arch.Should().Be("arm64");
options.Resource.Should().ContainKey("cpu");
options.SkipHealthCheck.Should().BeTrue();
options.ReadyTimeoutSeconds.Should().Be(60);
options.HealthCheckPollingInterval.Should().Be(500);
}
[Fact]
public void SandboxCreateOptions_WithNetworkPolicy_ShouldStorePolicy()
{
// Arrange & Act
var options = new SandboxCreateOptions
{
Image = "python:3.11",
NetworkPolicy = new NetworkPolicy
{
DefaultAction = NetworkRuleAction.Deny,
Egress = new List<NetworkRule>
{
new() { Action = NetworkRuleAction.Allow, Target = "pypi.org" }
}
}
};
// Assert
options.NetworkPolicy.Should().NotBeNull();
options.NetworkPolicy!.DefaultAction.Should().Be(NetworkRuleAction.Deny);
options.NetworkPolicy.Egress.Should().HaveCount(1);
}
[Fact]
public void SandboxCreateOptions_WithImageAuth_ShouldStoreAuth()
{
// Arrange & Act
var options = new SandboxCreateOptions
{
Image = "private-registry.com/image:tag",
ImageAuth = new ImageAuth
{
Username = "user",
Password = "pass"
}
};
// Assert
options.ImageAuth.Should().NotBeNull();
options.ImageAuth!.Username.Should().Be("user");
options.ImageAuth.Password.Should().Be("pass");
}
[Fact]
public void SandboxConnectOptions_ShouldStoreProperties()
{
// Arrange & Act
var options = new SandboxConnectOptions
{
SandboxId = "sandbox-123",
SkipHealthCheck = false,
ReadyTimeoutSeconds = 30,
HealthCheckPollingInterval = 200
};
// Assert
options.SandboxId.Should().Be("sandbox-123");
options.SkipHealthCheck.Should().BeFalse();
options.ReadyTimeoutSeconds.Should().Be(30);
options.HealthCheckPollingInterval.Should().Be(200);
}
[Fact]
public void SandboxResumeOptions_ShouldStoreProperties()
{
// Arrange & Act
var options = new SandboxResumeOptions
{
SkipHealthCheck = true,
ReadyTimeoutSeconds = 45,
HealthCheckPollingInterval = 300
};
// Assert
options.SkipHealthCheck.Should().BeTrue();
options.ReadyTimeoutSeconds.Should().Be(45);
options.HealthCheckPollingInterval.Should().Be(300);
}
[Fact]
public void WaitUntilReadyOptions_ShouldStoreProperties()
{
// Arrange & Act
var options = new WaitUntilReadyOptions
{
ReadyTimeoutSeconds = 60,
PollingIntervalMillis = 500
};
// Assert
options.ReadyTimeoutSeconds.Should().Be(60);
options.PollingIntervalMillis.Should().Be(500);
}
[Fact]
public void WaitUntilReadyOptions_WithCustomHealthCheck_ShouldStoreFunction()
{
// Arrange
Func<Sandbox, Task<bool>> healthCheck = async (sbx) =>
{
await Task.Delay(1);
return true;
};
// Act
var options = new WaitUntilReadyOptions
{
ReadyTimeoutSeconds = 30,
PollingIntervalMillis = 200,
HealthCheck = healthCheck
};
// Assert
options.HealthCheck.Should().NotBeNull();
options.HealthCheck.Should().BeSameAs(healthCheck);
}
[Fact]
public void SandboxManagerOptions_ShouldStoreProperties()
{
// Arrange
var config = new ConnectionConfig(new ConnectionConfigOptions
{
Domain = "api.example.com"
});
// Act
var options = new SandboxManagerOptions
{
ConnectionConfig = config
};
// Assert
options.ConnectionConfig.Should().BeSameAs(config);
}
[Fact]
public void SandboxFilter_ShouldStoreProperties()
{
// Arrange & Act
var filter = new SandboxFilter
{
States = new[] { "Running", "Paused" },
Metadata = new Dictionary<string, string> { ["env"] = "test" },
Page = 1,
PageSize = 20
};
// Assert
filter.States.Should().HaveCount(2);
filter.States.Should().Contain("Running");
filter.States.Should().Contain("Paused");
filter.Metadata.Should().ContainKey("env");
filter.Page.Should().Be(1);
filter.PageSize.Should().Be(20);
}
[Fact]
public void SandboxFilter_WithNullValues_ShouldAllowNulls()
{
// Arrange & Act
var filter = new SandboxFilter();
// Assert
filter.States.Should().BeNull();
filter.Metadata.Should().BeNull();
filter.Page.Should().BeNull();
filter.PageSize.Should().BeNull();
}
}