Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions modules/compatibility-tests/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ dependencies {
integrationTestImplementation project(':ignite-storage-page-memory')
integrationTestImplementation project(':ignite-metastorage-api')
integrationTestImplementation project(':ignite-metastorage')
integrationTestImplementation project(':ignite-vault')
integrationTestImplementation project(':ignite-cluster-management')
integrationTestImplementation project(':ignite-raft')
integrationTestImplementation project(':ignite-jdbc')
Expand Down
1 change: 1 addition & 0 deletions modules/compatibility-tests/jobs.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ dependencies {
jobsImplementation project(':ignite-metastorage-api')
jobsImplementation project(':ignite-metastorage')
jobsImplementation project(':ignite-page-memory')
jobsImplementation project(':ignite-vault')
jobsImplementation project(':ignite-storage-api')
jobsImplementation project(':ignite-storage-page-memory')
jobsImplementation project(':ignite-raft')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.ignite.internal;

import static org.apache.ignite.internal.CompatibilityTestCommon.createDefaultTables;
import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl;
import static org.apache.ignite.internal.compute.PutVaultEntriesJob.NEW_VALUE;
import static org.apache.ignite.internal.compute.PutVaultEntriesJob.OVERWRITTEN_KEY;
import static org.apache.ignite.internal.compute.PutVaultEntriesJob.REMOVED_KEY;
import static org.apache.ignite.internal.compute.PutVaultEntriesJob.TEST_KEY;
import static org.apache.ignite.internal.compute.PutVaultEntriesJob.TEST_VALUE;
import static org.apache.ignite.internal.jobs.DeploymentUtils.runJob;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;

import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import org.apache.ignite.Ignite;
import org.apache.ignite.internal.app.IgniteImpl;
import org.apache.ignite.internal.compute.PutVaultEntriesJob;
import org.apache.ignite.internal.jobs.DeploymentUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedClass;
import org.junit.jupiter.params.provider.MethodSource;

/** Compatibility tests for vault storage. */
@ParameterizedClass
@MethodSource("baseVersions")
@MicronautTest(rebuildContext = true)
public class ItVaultStorageCompatibilityTest extends CompatibilityTestBase {
@Override
protected int nodesCount() {
return 1;
}

@Override
protected void setupBaseVersion(Ignite baseIgnite) {
DeploymentUtils.deployJobs();

createDefaultTables(baseIgnite);

runPutVaultEntriesJob();
}

@Test
void testVaultStorageCompatibility() {
IgniteImpl ignite = unwrapIgniteImpl(cluster.node(0));
assertThat(ignite.vault().get(TEST_KEY).value(), is(TEST_VALUE));
assertThat(ignite.vault().get(OVERWRITTEN_KEY).value(), is(NEW_VALUE));
assertThat(ignite.vault().get(REMOVED_KEY), nullValue());
}

private void runPutVaultEntriesJob() {
runJob(cluster, PutVaultEntriesJob.class, "");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.ignite.internal.compute;

import static org.apache.ignite.internal.util.CompletableFutures.nullCompletedFuture;

import java.nio.charset.StandardCharsets;
import java.util.concurrent.CompletableFuture;
import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.JobExecutionContext;
import org.apache.ignite.internal.app.IgniteImpl;
import org.apache.ignite.internal.lang.ByteArray;
import org.apache.ignite.internal.vault.VaultManager;
import org.apache.ignite.internal.wrapper.Wrappers;

/** A job that writes values specified in constants to node's vault. */
public class PutVaultEntriesJob implements ComputeJob<String, Void> {
public static final ByteArray TEST_KEY = new ByteArray("test_key".getBytes(StandardCharsets.UTF_8));

public static final byte[] TEST_VALUE = "test_value".getBytes(StandardCharsets.UTF_8);

public static final ByteArray OVERWRITTEN_KEY = new ByteArray("overwritten_key".getBytes(StandardCharsets.UTF_8));

public static final byte[] INITIAL_VALUE = "initial_value".getBytes(StandardCharsets.UTF_8);

public static final byte[] NEW_VALUE = "NEW_VALUE".getBytes(StandardCharsets.UTF_8);

public static final ByteArray REMOVED_KEY = new ByteArray("removed_key".getBytes(StandardCharsets.UTF_8));

@Override
public CompletableFuture<Void> executeAsync(JobExecutionContext context, String arg) {

try {
IgniteImpl igniteImpl = Wrappers.unwrap(context.ignite(), IgniteImpl.class);

VaultManager vault = igniteImpl.vault();

vault.put(TEST_KEY, TEST_VALUE);
vault.put(OVERWRITTEN_KEY, INITIAL_VALUE);
vault.put(REMOVED_KEY, INITIAL_VALUE);
vault.put(OVERWRITTEN_KEY, NEW_VALUE);
vault.remove(REMOVED_KEY);

return nullCompletedFuture();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}