diff options
author | Alan Conway <aconway@apache.org> | 2009-11-24 20:07:24 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2009-11-24 20:07:24 +0000 |
commit | 0fb7ff9cfbfd01e9093c2c6021a5915696d2a089 (patch) | |
tree | 1d2db335592be80a9aa9f8f404d2c1682afeb485 /cpp/src/tests/StoreStatus.cpp | |
parent | 1ee447563d208b39e962537a47f14aea741777b0 (diff) | |
download | qpid-python-0fb7ff9cfbfd01e9093c2c6021a5915696d2a089.tar.gz |
Support for restarting a persistent cluster.
Option --cluster-size=N: members wait for N members before recovering store.
Stores marked as clean/dirty. Automatically recover from clean store on restart.
Stores marked with UUID to detect errors.
Not yet implemented: consistency checks, manual recovery from all dirty stores.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@883842 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/tests/StoreStatus.cpp')
-rw-r--r-- | cpp/src/tests/StoreStatus.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/cpp/src/tests/StoreStatus.cpp b/cpp/src/tests/StoreStatus.cpp new file mode 100644 index 0000000000..37ba19e34a --- /dev/null +++ b/cpp/src/tests/StoreStatus.cpp @@ -0,0 +1,109 @@ + /* + * + * Copyright (c) 2006 The Apache Software Foundation + * + * Licensed 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. + * + */ + + +#include "unit_test.h" +#include "test_tools.h" +#include "qpid/cluster/StoreStatus.h" +#include "qpid/framing/Uuid.h" +#include <boost/assign.hpp> +#include <boost/filesystem/operations.hpp> + +using namespace std; +using namespace qpid::cluster; +using namespace qpid::framing; +using namespace qpid::framing::cluster; +using namespace boost::assign; +using namespace boost::filesystem; + + +namespace qpid { +namespace tests { + +QPID_AUTO_TEST_SUITE(StoreStatusTestSuite) + +const char* TEST_DIR = "StoreStatus.tmp"; + +QPID_AUTO_TEST_CASE(testLoadEmpty) { + create_directory(TEST_DIR); + StoreStatus ss(TEST_DIR); + BOOST_CHECK_EQUAL(ss.getState(), STORE_STATE_NO_STORE); + BOOST_CHECK(!ss.getStart()); + BOOST_CHECK(!ss.getStop()); + ss.load(); + BOOST_CHECK_EQUAL(ss.getState(), STORE_STATE_EMPTY_STORE); + BOOST_CHECK(!ss.getStop()); + remove_all(TEST_DIR); +} + +QPID_AUTO_TEST_CASE(testSaveLoadDirty) { + create_directory(TEST_DIR); + Uuid start = Uuid(true); + StoreStatus ss(TEST_DIR); + ss.load(); + ss.dirty(start); + BOOST_CHECK_EQUAL(ss.getState(), STORE_STATE_DIRTY_STORE); + + StoreStatus ss2(TEST_DIR); + ss2.load(); + BOOST_CHECK_EQUAL(ss2.getState(), STORE_STATE_DIRTY_STORE); + BOOST_CHECK_EQUAL(ss2.getStart(), start); + BOOST_CHECK(!ss2.getStop()); + remove_all(TEST_DIR); +} + +QPID_AUTO_TEST_CASE(testSaveLoadClean) { + create_directory(TEST_DIR); + Uuid start = Uuid(true); + Uuid stop = Uuid(true); + StoreStatus ss(TEST_DIR); + ss.load(); + ss.dirty(start); + ss.clean(stop); + BOOST_CHECK_EQUAL(ss.getState(), STORE_STATE_CLEAN_STORE); + + StoreStatus ss2(TEST_DIR); + ss2.load(); + BOOST_CHECK_EQUAL(ss2.getState(), STORE_STATE_CLEAN_STORE); + BOOST_CHECK_EQUAL(ss2.getStart(), start); + BOOST_CHECK_EQUAL(ss2.getStop(), stop); + remove_all(TEST_DIR); +} + +QPID_AUTO_TEST_CASE(testMarkDirty) { + // Save clean then mark to dirty. + create_directory(TEST_DIR); + Uuid start = Uuid(true); + Uuid stop = Uuid(true); + StoreStatus ss(TEST_DIR); + ss.load(); + ss.dirty(start); + ss.clean(stop); + ss.dirty(start); + + StoreStatus ss2(TEST_DIR); + ss2.load(); + BOOST_CHECK_EQUAL(ss2.getState(), STORE_STATE_DIRTY_STORE); + BOOST_CHECK_EQUAL(ss2.getStart(), start); + BOOST_CHECK(!ss2.getStop()); + remove_all(TEST_DIR); +} + +QPID_AUTO_TEST_SUITE_END() + +}} // namespace qpid::tests |