/* * 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.spi.checkpoint; import org.apache.ignite.GridTestIoUtils; import org.apache.ignite.testframework.junits.spi.GridSpiAbstractTest; /** * Grid checkpoint SPI abstract test. * @param <T> Concrete SPI class. */ @SuppressWarnings({"CatchGenericClass"}) public abstract class GridCheckpointSpiAbstractTest<T extends CheckpointSpi> extends GridSpiAbstractTest<T> { /** */ private static final int CHECK_POINT_COUNT = 10; /** */ private static final String CHECK_POINT_KEY_PREFIX = "testCheckpoint"; /** * @throws Exception Thrown in case of any errors. */ public void testSaveLoadRemoveWithoutExpire() throws Exception { String dataPrefix = "Test check point data "; // Save states. for (int i = 0; i < CHECK_POINT_COUNT; i++) { GridCheckpointTestState state = new GridCheckpointTestState(dataPrefix + i); getSpi().saveCheckpoint(CHECK_POINT_KEY_PREFIX + i, GridTestIoUtils.serializeJdk(state), 0, true); info("Saved check point [key=" + CHECK_POINT_KEY_PREFIX + i + ", data=" + state + ']'); } // Load and check states. for (int i = 0; i < CHECK_POINT_COUNT; i++) { byte[] serState = getSpi().loadCheckpoint(CHECK_POINT_KEY_PREFIX + i); assertNotNull("Missing checkpoint: " + CHECK_POINT_KEY_PREFIX + i, serState); GridCheckpointTestState state = GridTestIoUtils.deserializeJdk(serState); info("Loaded check point [key=" + CHECK_POINT_KEY_PREFIX + i + ", data=" + state + ']'); assert state != null : "Can't load checkpoint state for key: " + CHECK_POINT_KEY_PREFIX + i; assert (dataPrefix + i).equals(state.getData()) : "Invalid state loaded [expected='" + dataPrefix + i + "', received='" + state.getData() + "']"; } // Remove states. for (int i = 0; i < CHECK_POINT_COUNT; i++) { boolean rmv = getSpi().removeCheckpoint(CHECK_POINT_KEY_PREFIX + i); if (rmv) info("Removed check point: " + CHECK_POINT_KEY_PREFIX + i); else info("Can't remove check point: " + CHECK_POINT_KEY_PREFIX + i); } // Check that states was removed. for (int i = 0; i < CHECK_POINT_COUNT; i++) { final String key = CHECK_POINT_KEY_PREFIX + i; final byte[] serState = getSpi().loadCheckpoint(key); assertNull("Checkpoint state should not be loaded with key: " + key, serState); } } /** * @throws Exception Thrown in case of any errors. */ public void testSaveWithExpire() throws Exception { // Save states. for (int i = 0; i < CHECK_POINT_COUNT; i++) { GridCheckpointTestState state = new GridCheckpointTestState("Test check point data " + i + '.'); getSpi().saveCheckpoint(CHECK_POINT_KEY_PREFIX + i, GridTestIoUtils.serializeJdk(state), 1, true); info("Saved check point [key=" + CHECK_POINT_KEY_PREFIX + i + ", data=" + state + ']'); } // For small expiration intervals no warranty that state will be removed. Thread.sleep(100); // Check that states was removed. for (int i = 0; i < CHECK_POINT_COUNT; i++) { final String key = CHECK_POINT_KEY_PREFIX + i; final byte[] serState = getSpi().loadCheckpoint(key); assert serState == null : "Checkpoint state should not be loaded with key: " + key; } } /** * @throws Exception Thrown in case of any errors. */ public void testDuplicates() throws Exception { int idx1 = 1; int idx2 = 2; GridCheckpointTestState state1 = new GridCheckpointTestState(Integer.toString(idx1)); GridCheckpointTestState state2 = new GridCheckpointTestState(Integer.toString(idx2)); getSpi().saveCheckpoint(CHECK_POINT_KEY_PREFIX, GridTestIoUtils.serializeJdk(state1), 0, true); getSpi().saveCheckpoint(CHECK_POINT_KEY_PREFIX, GridTestIoUtils.serializeJdk(state2), 0, true); byte[] serState = getSpi().loadCheckpoint(CHECK_POINT_KEY_PREFIX); GridCheckpointTestState state = GridTestIoUtils.deserializeJdk(serState); assert state != null; assert state.equals(state2) : "Unexpected checkpoint state."; // Remove. getSpi().removeCheckpoint(CHECK_POINT_KEY_PREFIX); serState = getSpi().loadCheckpoint(CHECK_POINT_KEY_PREFIX); final byte[] finalSerState = serState; assert finalSerState == null : "Checkpoint state should not be loaded with key: " + CHECK_POINT_KEY_PREFIX; } }