vectordotdev/vector · error

unknown integration

Error message

unknown integration: {integration}

What it means

Composing an integration test directory path fails because the named integration directory does not exist under the base test directory. `ComposeTestConfig::load` requires that each integration (e.g. "aws") correspond to a real directory before it will build a config. This guards against typos and stale integration names passed on the CLI.

Solutions

  1. Run `cargo vdev int show` to list valid integrations and use the exact name
  2. Check the directory exists under tests/integration (the base/root dir used by vdev)
  3. If the integration was renamed, update the name in your script/CI config
  4. Create the missing directory if you intended to add a new integration

Example fix

// before
cargo vdev int run aws_cloudwatch  # no such directory
// after
cargo vdev int run aws             # matches tests/integration/aws/
Defensive patterns

Strategy: validation

Validate before calling

use std::path::PathBuf;
fn integration_exists(name: &str) -> bool {
    let dir: PathBuf = ["tests", "integration", name].iter().collect();
    dir.is_dir()
}
assert!(integration_exists("aws"), "unknown integration: aws");

Type guard

fn valid_integration(name: &str) -> Option<std::path::PathBuf> {
    let dir: std::path::PathBuf = ["tests", "integration", name].iter().collect();
    dir.is_dir().then_some(dir)
}

Prevention

When it happens

Trigger: Calling `cargo vdev int run/show/test <name>` (which routes into `ComposeTestConfig::load`) with an integration name whose directory `[app::path()]/<base_dir>/<root_dir>/<integration>` is not a directory.

Common situations: Typo in the integration name on the command line; renaming or deleting an integration directory (tests/integration/...) without updating scripts or docs; running an integration test that was removed upstream.

Related errors


AI-assisted analysis of vectordotdev/vector@bdb87aeaa4 (2026-09-16). Data as JSON: /api/errors/02b8188ed313740e. Report an issue: GitHub.

Appendix: source

Thrown at vdev/src/testing/config.rs:225

                    .matrix
                    .keys()
                    .zip(product)
                    .map(|(variable, value)| (variable.clone(), Some(value.clone())))
                    .collect();
                (key, config)
            })
            .collect()
    }

    pub fn load(root_dir: &str, integration: &str) -> Result<(PathBuf, Self)> {
        let (base_dir, use_config_subdir) = test_dir_config(root_dir);

        let test_dir: PathBuf = [app::path(), base_dir, root_dir, integration]
            .iter()
            .collect();

        if !test_dir.is_dir() {
            bail!("unknown integration: {integration}");
        }

        let config_dir = if use_config_subdir {
            test_dir.join(CONFIG_SUBDIR)
        } else {
            test_dir
        };
        let config = Self::parse_file(&config_dir.join(FILE_NAME))?;
        Ok((config_dir, config))
    }

    fn collect_all_dir(
        tests_dir: &Path,
        configs: &mut BTreeMap<String, Self>,
        use_config_subdir: bool,
    ) -> Result<()> {
        for entry in tests_dir.read_dir()? {
            let entry = entry?;

View on GitHub (pinned to bdb87aeaa4)