Spring Boot с Couchbase, поскольку TestContainer выдает Область, не найденную в хранилище данных CBJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Boot с Couchbase, поскольку TestContainer выдает Область, не найденную в хранилище данных CB

Сообщение Anonymous »

У меня возникла проблема с запуском всех интеграционных тестов, выполняемых с помощью Couchbase TestContainer, в моем примере загрузки Spring.
Вот соответствующая часть файла application.yml, показанная ниже

Код: Выделить всё

  couchbase:
connection-string: couchbase://${COUCHBASE_HOST:127.0.0.1}
username: ${COUCHBASE_USERNAME:Administrator}
password: ${COUCHBASE_PASSWORD:123456}
bucket: ${COUCHBASE_BUCKET:todo_list}
scopes:
user-scope: user
task-scope: task
invalid-token-scope : invalid-token
log-scope: log
collections:
user-collection: user
task-collection: task
invalid-token-collection: invalid-token
log-collection : log
Вот класс, показанный ниже

Код: Выделить всё

@Slf4j
@Testcontainers
public abstract class AbstractTestContainerConfiguration {

private static final String BUCKET_NAME = "todo_list";

static CouchbaseContainer COUCHBASE_CONTAINER = new CouchbaseContainer("couchbase/server:7.0.3")
.withCredentials("Administrator", "123456");

@BeforeAll
public static void setup() {
COUCHBASE_CONTAINER.start();

// Connect to Couchbase cluster
Cluster cluster = Cluster.connect(
COUCHBASE_CONTAINER.getConnectionString(),
COUCHBASE_CONTAINER.getUsername(),
COUCHBASE_CONTAINER.getPassword()
);

// Create the bucket if it doesn't exist
createBucketIfNotExists(cluster);

// Access the bucket and ensure it's ready
Bucket bucket = cluster.bucket(BUCKET_NAME);
bucket.waitUntilReady(Duration.ofSeconds(10));
CollectionManager collectionManager = bucket.collections();

// Create scopes and collections (according to your configuration)
createScopeAndCollection(collectionManager, "invalid-token", "invalid-token");
createScopeAndCollection(collectionManager, "user", "user");
createScopeAndCollection(collectionManager, "task", "task");
createScopeAndCollection(collectionManager, "log", "log");

// Ensure all necessary collections exist
ensureCollectionExists(bucket, "invalid-token", "invalid-token");
ensureCollectionExists(bucket, "user", "user");
ensureCollectionExists(bucket, "task", "task");
ensureCollectionExists(bucket, "log", "log");

cluster.disconnect();
}

private static void createBucketIfNotExists(Cluster cluster) {
try {
// Check if the bucket already exists
cluster.buckets().getBucket(AbstractTestContainerConfiguration.BUCKET_NAME);
} catch (Exception e) {
log.info("Bucket '{}' not found.  Creating a new bucket.", AbstractTestContainerConfiguration.BUCKET_NAME);
cluster.buckets().createBucket(
BucketSettings.create(AbstractTestContainerConfiguration.BUCKET_NAME)
.flushEnabled(true)
.ramQuotaMB(100)
.numReplicas(1)
);
}
}

private static void createScopeAndCollection(CollectionManager manager, String scopeName, String collectionName) {
try {
// Create the scope if it does not exist
try {
manager.createScope(scopeName);
log.info("Scope created: {}", scopeName);
} catch (ScopeExistsException ignored) {
log.warn("Scope already exists: {}", scopeName);
}

// Create the collection under the given scope if it does not exist
try {
manager.createCollection(scopeName, collectionName);
log.info("Collection created: {}.{}", scopeName, collectionName);
} catch (CollectionExistsException ignored) {
log.warn("Collection already exists in scope {}: {}", scopeName, collectionName);
}
} catch (Exception e) {
log.error("Error creating scope or collection: {}.{}", scopeName, collectionName, e);
}
}

private static void ensureCollectionExists(Bucket bucket, String scopeName, String collectionName) {
try {
Collection collection = bucket.scope(scopeName).collection(collectionName);
log.info("Collection exists: {}.{}", scopeName, collectionName);
} catch (CollectionNotFoundException e) {
log.info("Collection not found: {}.{} - Creating it.", scopeName, collectionName);
bucket.collections().createCollection(scopeName, collectionName);
}
}

@DynamicPropertySource
private static void overrideProps(DynamicPropertyRegistry dynamicPropertyRegistry) {
dynamicPropertyRegistry.add("spring.couchbase.connection-string", COUCHBASE_CONTAINER::getConnectionString);
dynamicPropertyRegistry.add("spring.couchbase.username", COUCHBASE_CONTAINER::getUsername);
dynamicPropertyRegistry.add("spring.couchbase.password", COUCHBASE_CONTAINER::getPassword);
dynamicPropertyRegistry.add("spring.couchbase.bucket", () -> BUCKET_NAME);
}
}
Вот ошибка, показанная ниже

Код: Выделить всё

com.couchbase.client.core.error.IndexFailureException: The server reported an issue with the underlying index {"completed":true,"coreId":"0x42adbe3e00000002","errors":[{"code":12021,"message":"Scope not found in CB datastore default:todo_list.invalid_token","retry":false}],"httpStatus":500,"idempotent":true,"lastDispatchedFrom":"127.0.0.1:26562","lastDispatchedTo":"localhost:26462","requestId":47,"requestType":"QueryRequest","retried":0,"service":{"bucket":"todo_list","operationId":"null","scope":"invalid_token","statement":"SELECT `_class`, META(`invalid_token`).`id` AS __id, `TOKEN_ID`, `createdAt`, `createdBy`, `updatedAt`, `updatedBy` FROM `invalid_token` WHERE `_class` = \"com.example.todowithcouchbase.auth.model.entity.InvalidTokenEntity\" AND `TOKEN_ID` = $1","type":"query"},"timeoutMs":75000,"timings":{"dispatchMicros":34547,"totalDispatchMicros":34547,"totalMicros":99591}}
Как устранить проблему?

Подробнее здесь: https://stackoverflow.com/questions/791 ... cb-datasto
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»