test(tvix/[ca]store): enable bigtable only with "integration" feature

The emulator and bigtable client are quite big. Remove them from the
default //tvix:shell.

Put the tests behind a `integration` feature flag, and add a variant
with that enabled to CI, and drop the bigtable tools from //tvix:shell.

Change-Id: Ie042097a0d6fc26542faa96c139b77298ccb160a
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11582
Reviewed-by: edef <edef@edef.eu>
Autosubmit: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
Florian Klink 2024-05-03 00:09:46 +03:00 committed by clbot
parent b8e82a42ed
commit 37671d3913
10 changed files with 44 additions and 15 deletions

View file

@ -13771,7 +13771,7 @@ rec {
"tonic-reflection" = [ "dep:tonic-reflection" ];
"virtiofs" = [ "fs" "dep:vhost" "dep:vhost-user-backend" "dep:virtio-queue" "dep:vm-memory" "dep:vmm-sys-util" "dep:virtio-bindings" "fuse-backend-rs?/vhost-user-fs" "fuse-backend-rs?/virtiofs" ];
};
resolvedDefaultFeatures = [ "cloud" "default" "fs" "fuse" "tonic-reflection" "virtiofs" ];
resolvedDefaultFeatures = [ "cloud" "default" "fs" "fuse" "integration" "tonic-reflection" "virtiofs" ];
};
"tvix-cli" = rec {
crateName = "tvix-cli";
@ -14489,7 +14489,7 @@ rec {
"tonic-reflection" = [ "dep:tonic-reflection" "tvix-castore/tonic-reflection" ];
"virtiofs" = [ "tvix-castore/virtiofs" ];
};
resolvedDefaultFeatures = [ "cloud" "default" "fuse" "otlp" "tonic-reflection" "virtiofs" ];
resolvedDefaultFeatures = [ "cloud" "default" "fuse" "integration" "otlp" "tonic-reflection" "virtiofs" ];
};
"typenum" = rec {
crateName = "typenum";

View file

@ -112,3 +112,7 @@ virtiofs = [
]
fuse = ["fs"]
tonic-reflection = ["dep:tonic-reflection"]
# Whether to run the integration tests.
# Requires the following packages in $PATH:
# cbtemulator, google-cloud-bigtable-tool
integration = []

View file

@ -1,12 +1,23 @@
{ depot, pkgs, ... }:
depot.tvix.crates.workspaceMembers.tvix-castore.build.override {
(depot.tvix.crates.workspaceMembers.tvix-castore.build.override {
runTests = true;
testPreRun = ''
export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt;
export PATH="$PATH:${pkgs.lib.makeBinPath [pkgs.cbtemulator pkgs.google-cloud-bigtable-tool]}"
'';
# enable some optional features.
features = [ "default" "cloud" ];
}
}).overrideAttrs (_: {
meta.ci.targets = [ "integration-tests" ];
passthru.integration-tests = depot.tvix.crates.workspaceMembers.tvix-castore.build.override {
runTests = true;
testPreRun = ''
export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt;
export PATH="$PATH:${pkgs.lib.makeBinPath [pkgs.cbtemulator pkgs.google-cloud-bigtable-tool]}"
'';
# enable some optional features.
features = [ "default" "cloud" "integration" ];
};
})

View file

@ -144,7 +144,7 @@ mod tests {
#[case::grpc_invalid_host_and_path("grpc+http://localhost/some-path", false)]
/// A valid example for Bigtable
#[cfg_attr(
feature = "cloud",
all(feature = "cloud", feature = "integration"),
case::bigtable_valid_url(
"bigtable://instance-1?project_id=project-1&table_name=table-1&family_name=cf1",
true
@ -152,7 +152,7 @@ mod tests {
)]
/// A valid example for Bigtable, specifying a custom channel size and timeout
#[cfg_attr(
feature = "cloud",
all(feature = "cloud", feature = "integration"),
case::bigtable_valid_url(
"bigtable://instance-1?project_id=project-1&table_name=table-1&family_name=cf1&channel_size=10&timeout=10",
true
@ -160,7 +160,7 @@ mod tests {
)]
/// A invalid Bigtable example (missing fields)
#[cfg_attr(
feature = "cloud",
all(feature = "cloud", feature = "integration"),
case::bigtable_invalid_url("bigtable://instance-1", false)
)]
#[tokio::test]

View file

@ -26,7 +26,7 @@ use self::utils::make_grpc_directory_service_client;
#[case::grpc(make_grpc_directory_service_client().await)]
#[case::memory(directoryservice::from_addr("memory://").await.unwrap())]
#[case::sled(directoryservice::from_addr("sled://").await.unwrap())]
#[cfg_attr(feature = "cloud", case::bigtable(directoryservice::from_addr("bigtable://instance-1?project_id=project-1&table_name=table-1&family_name=cf1").await.unwrap()))]
#[cfg_attr(all(feature = "cloud", feature = "integration"), case::bigtable(directoryservice::from_addr("bigtable://instance-1?project_id=project-1&table_name=table-1&family_name=cf1").await.unwrap()))]
pub fn directory_services(#[case] directory_service: impl DirectoryService) {}
/// Ensures asking for a directory that doesn't exist returns a Ok(None).

View file

@ -29,12 +29,10 @@ pkgs.mkShell {
pkgs.cargo
pkgs.cargo-machete
pkgs.cargo-expand
pkgs.cbtemulator
pkgs.clippy
pkgs.evans
pkgs.fuse
pkgs.go
pkgs.google-cloud-bigtable-tool
pkgs.grpcurl
pkgs.hyperfine
pkgs.mdbook

View file

@ -74,3 +74,7 @@ fuse = ["tvix-castore/fuse"]
otlp = ["dep:opentelemetry", "dep:opentelemetry-otlp", "dep:opentelemetry_sdk"]
tonic-reflection = ["dep:tonic-reflection", "tvix-castore/tonic-reflection"]
virtiofs = ["tvix-castore/virtiofs"]
# Whether to run the integration tests.
# Requires the following packages in $PATH:
# cbtemulator, google-cloud-bigtable-tool
integration = []

View file

@ -26,7 +26,6 @@ in
runTests = true;
testPreRun = ''
export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
export PATH="$PATH:${pkgs.lib.makeBinPath [pkgs.cbtemulator pkgs.google-cloud-bigtable-tool]}"
'';
# enable some optional features.
@ -34,7 +33,20 @@ in
# virtiofs feature currently fails to build on Darwin.
++ pkgs.lib.optional pkgs.stdenv.isLinux "virtiofs";
}).overrideAttrs (_: {
meta.ci.targets = [ "integration-tests" ];
meta.ci.extraSteps = {
import-docs = (mkImportCheck "tvix/store/docs" ./docs);
};
passthru.integration-tests = depot.tvix.crates.workspaceMembers.tvix-store.build.override {
runTests = true;
testPreRun = ''
export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
export PATH="$PATH:${pkgs.lib.makeBinPath [pkgs.cbtemulator pkgs.google-cloud-bigtable-tool]}"
'';
# enable some optional features.
features = [ "default" "cloud" "integration" ]
# virtiofs feature currently fails to build on Darwin.
++ pkgs.lib.optional pkgs.stdenv.isLinux "virtiofs";
};
})

View file

@ -208,7 +208,7 @@ mod tests {
#[case::grpc_invalid_host_and_path("grpc+http://localhost/some-path", false)]
/// A valid example for Bigtable.
#[cfg_attr(
feature = "cloud",
all(feature = "cloud", feature = "integration"),
case::bigtable_valid(
"bigtable://instance-1?project_id=project-1&table_name=table-1&family_name=cf1",
true
@ -216,7 +216,7 @@ mod tests {
)]
/// An invalid example for Bigtable, missing fields
#[cfg_attr(
feature = "cloud",
all(feature = "cloud", feature = "integration"),
case::bigtable_invalid_missing_fields("bigtable://instance-1", false)
)]
#[tokio::test]

View file

@ -51,7 +51,7 @@ pub async fn make_path_info_service(uri: &str) -> BSDSPS {
#[case::memory(make_path_info_service("memory://").await)]
#[case::grpc(make_grpc_path_info_service_client().await)]
#[case::sled(make_path_info_service("sled://").await)]
#[cfg_attr(feature = "cloud", case::bigtable(make_path_info_service("bigtable://instance-1?project_id=project-1&table_name=table-1&family_name=cf1").await))]
#[cfg_attr(all(feature = "cloud",feature="integration"), case::bigtable(make_path_info_service("bigtable://instance-1?project_id=project-1&table_name=table-1&family_name=cf1").await))]
pub fn path_info_services(
#[case] services: (
impl BlobService,