test/unit_tests/bundle-payload-test.cc
changeset 0 2b3e5ec03512
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit_tests/bundle-payload-test.cc	Thu Apr 21 14:57:45 2011 +0100
@@ -0,0 +1,126 @@
+/*
+ *    Copyright 2005-2006 Intel Corporation
+ * 
+ *    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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <dtn-config.h>
+#endif
+
+#include <oasys/util/UnitTest.h>
+
+#include "bundling/Bundle.h"
+#include "bundling/BundleList.h"
+#include <oasys/thread/SpinLock.h>
+#include "storage/BundleStore.h"
+#include "storage/DTNStorageConfig.h"
+
+using namespace dtn;
+using namespace oasys;
+
+int
+payload_test(BundlePayload::location_t location)
+{
+    u_char buf[64];
+    const u_char* data;
+    SpinLock l;
+    BundlePayload p(&l);
+    bzero(buf, sizeof(buf));
+
+    int errno_; const char* strerror_;
+
+    log_debug_p("/test", "checking initialization");
+    p.init(1, location);
+    CHECK_EQUAL(p.location(), location);
+    CHECK(p.length() == 0);
+    
+    log_debug_p("/test", "checking set_data");
+    p.set_data((const u_char*)"abcdefghijklmnopqrstuvwxyz", 26);
+    CHECK_EQUAL(p.location(), location);
+    CHECK_EQUAL(p.length(), 26);
+    
+    log_debug_p("/test", "checking read_data");
+    data = p.read_data(0, 26, buf);
+    CHECK_EQUALSTR((char*)data, "abcdefghijklmnopqrstuvwxyz");
+    data = p.read_data(10, 5, buf);
+    CHECK_EQUALSTRN((char*)data, "klmno", 5);
+    
+    log_debug_p("/test", "checking truncate");
+    p.truncate(10);
+    data = p.read_data(0, 10, buf);
+    CHECK_EQUAL(p.length(), 10);
+    CHECK_EQUALSTRN((char*)data, "abcdefghij", 10);
+
+    log_debug_p("/test", "checking append_data");
+    p.append_data((u_char*)"ABCDE", 5);
+    data = p.read_data(0, 15, buf);
+    CHECK_EQUALSTRN((char*)data, "abcdefghijABCDE", 15);
+
+    p.append_data((u_char*)"FGH", 3);
+    data = p.read_data(0, 18, buf);
+    CHECK_EQUAL(p.length(), 18);
+    CHECK_EQUALSTRN((char*)data, "abcdefghijABCDEFGH", 18);
+    
+    log_debug_p("/test", "checking write_data overwrite");
+    p.write_data((u_char*)"BCD", 1, 3);
+    data = p.read_data(0, 18, buf);
+    CHECK_EQUAL(p.length(), 18);
+    CHECK_EQUALSTRN((char*)data, "aBCDefghijABCDEFGH", 18);
+
+    log_debug_p("/test", "checking write_data with gap");
+    p.set_length(30);
+    p.write_data((u_char*)"XXXXX", 25, 5);
+    CHECK_EQUAL(p.length(), 30);
+
+    p.write_data((u_char*)"_______", 18, 7);
+    data = p.read_data(0, 30, buf);
+    CHECK_EQUAL(p.length(), 30);
+    CHECK_EQUALSTR((char*)data, "aBCDefghijABCDEFGH_______XXXXX");
+
+    return UNIT_TEST_PASSED;
+}
+
+DECLARE_TEST(MemoryPayloadTest) {
+    return payload_test(BundlePayload::MEMORY);
+}
+
+DECLARE_TEST(DiskPayloadTest) {
+    return payload_test(BundlePayload::DISK);
+}
+
+DECLARE_TESTER(BundlePayloadTester) {
+    ADD_TEST(MemoryPayloadTest);
+    ADD_TEST(DiskPayloadTest);
+}
+
+int
+main(int argc, const char** argv)
+{
+    BundlePayloadTester t("bundle payload test");
+    t.init(argc, argv, true);
+    
+    system("rm -rf .bundle-payload-test");
+    system("mkdir  .bundle-payload-test");
+    DTNStorageConfig cfg("", "memorydb", "", "");
+    cfg.init_ = true;
+    cfg.payload_dir_.assign(".bundle-payload-test");
+    cfg.leave_clean_file_ = false;
+    oasys::DurableStore ds("/test/ds");
+    ds.create_store(cfg);
+    BundleStore::init(cfg, &ds);
+    
+    t.run_tests();
+
+    system("rm -rf .bundle-payload-test");
+}