ValueStoreWalConfigValidationTest.java

/*******************************************************************************
 * Copyright (c) 2025 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/
package org.eclipse.rdf4j.sail.nativerdf.wal;

import static org.assertj.core.api.Assertions.assertThatThrownBy;

import java.nio.file.Path;
import java.util.UUID;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

class ValueStoreWalConfigValidationTest {

	@TempDir
	Path tempDir;

	@Test
	void requiresWalDirectory() {
		ValueStoreWalConfig.Builder b = ValueStoreWalConfig.builder().storeUuid(UUID.randomUUID().toString());
		assertThatThrownBy(b::build).isInstanceOf(IllegalStateException.class)
				.hasMessageContaining("walDirectory");
	}

	@Test
	void requiresStoreUuid() {
		ValueStoreWalConfig.Builder b = ValueStoreWalConfig.builder().walDirectory(tempDir);
		assertThatThrownBy(b::build).isInstanceOf(IllegalStateException.class)
				.hasMessageContaining("storeUuid");
	}

	@Test
	void validatesPositiveSizes() {
		// maxSegmentBytes must be > 0
		ValueStoreWalConfig.Builder base1 = ValueStoreWalConfig.builder()
				.walDirectory(tempDir)
				.storeUuid(UUID.randomUUID().toString());
		assertThatThrownBy(() -> base1.maxSegmentBytes(0).build())
				.isInstanceOf(IllegalStateException.class)
				.hasMessageContaining("maxSegmentBytes");

		// queueCapacity must be > 0
		ValueStoreWalConfig.Builder base2 = ValueStoreWalConfig.builder()
				.walDirectory(tempDir)
				.storeUuid(UUID.randomUUID().toString());
		assertThatThrownBy(() -> base2.queueCapacity(0).build())
				.isInstanceOf(IllegalStateException.class)
				.hasMessageContaining("queueCapacity");

		// batchBufferBytes must be > 4KB
		ValueStoreWalConfig.Builder base3 = ValueStoreWalConfig.builder()
				.walDirectory(tempDir)
				.storeUuid(UUID.randomUUID().toString());
		assertThatThrownBy(() -> base3.batchBufferBytes(4096).build())
				.isInstanceOf(IllegalStateException.class)
				.hasMessageContaining("batchBufferBytes");
	}
}