| Crates.io | registry-testkit |
| lib.rs | registry-testkit |
| version | 0.1.3 |
| created_at | 2025-11-09 21:00:35.269043+00 |
| updated_at | 2025-12-11 19:57:39.17215+00 |
| description | A minimal, OCI-compliant container registry for testing and development |
| homepage | |
| repository | https://github.com/gpmcp/registry-testkit |
| max_upload_size | |
| id | 1924467 |
| size | 109,869 |
A minimal, OCI-compliant container registry mock for testing.
Start a registry in your tests:
use registry_testkit::{RegistryConfig, RegistryServer};
#[tokio::test]
async fn test_docker_operations() {
// Start registry with auto-assigned port
let config = RegistryConfig::memory();
let server = RegistryServer::new(config).await.unwrap();
// Use in your tests
let registry_url = server.url();
let port = server.port();
// Test your Docker/OCI operations
// ...
}
// In-memory storage (fast, for tests)
let config = RegistryConfig::memory();
// Filesystem storage (persistent)
let config = RegistryConfig::temp_dir();
// Custom port
let config = RegistryConfig::memory().with_port(5000);
// Custom host
let config = RegistryConfig::memory().with_host("127.0.0.1");
See tests/integration_test.rs for complete examples:
use bollard::Docker;
use bollard::image::{PushImageOptions, TagImageOptions};
use futures_util::stream::StreamExt;
#[tokio::test]
async fn test_docker_push_pull() {
let config = RegistryConfig::memory();
let server = RegistryServer::new(config).await.unwrap();
let docker = Docker::connect_with_local_defaults().unwrap();
let registry_image = format!("localhost:{}/test:latest", server.port());
// Tag and push
docker.tag_image("busybox:latest", Some(TagImageOptions {
repo: format!("localhost:{}/test", server.port()),
tag: "latest".to_string(),
})).await.unwrap();
let mut push = docker.push_image(®istry_image, None::<PushImageOptions<String>>, None);
while let Some(result) = push.next().await {
result.unwrap();
}
// Now pull from your mock registry
// ...
}
Apache-2.0