diff UnitTestsSources/MemoryCacheTests.cpp @ 1367:fe6e5a9f1ea2 query-retrieve

SharedArchive
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 22 May 2015 17:40:10 +0200
parents 6e7e5ed91c2d
children f967bdf8534e
line wrap: on
line diff
--- a/UnitTestsSources/MemoryCacheTests.cpp	Fri May 22 16:17:28 2015 +0200
+++ b/UnitTestsSources/MemoryCacheTests.cpp	Fri May 22 17:40:10 2015 +0200
@@ -39,6 +39,7 @@
 #include <boost/lexical_cast.hpp>
 #include "../Core/IDynamicObject.h"
 #include "../Core/Cache/MemoryCache.h"
+#include "../Core/Cache/SharedArchive.h"
 
 
 TEST(LRU, Basic)
@@ -228,3 +229,66 @@
 
   ASSERT_EQ("45 42 43 47 44 42 ", provider.log_);
 }
+
+
+
+
+
+
+
+namespace
+{
+  class S : public Orthanc::IDynamicObject
+  {
+  private:
+    std::string value_;
+
+  public:
+    S(const std::string& value) : value_(value)
+    {
+    }
+
+    const std::string& GetValue() const
+    {
+      return value_;
+    }
+
+    static const std::string& Access(const Orthanc::IDynamicObject& obj)
+    {
+      return dynamic_cast<const S&>(obj).GetValue();
+    }
+  };
+}
+
+
+TEST(LRU, SharedArchive)
+{
+  std::string first, second;
+  Orthanc::SharedArchive a(3);
+  first = a.Add(new S("First item"));
+  second = a.Add(new S("Second item"));
+
+  for (int i = 1; i < 100; i++)
+  {
+    a.Add(new S("Item " + boost::lexical_cast<std::string>(i)));
+    // Continuously protect the two first items
+    try { Orthanc::SharedArchive::Accessor(a, first);  } catch (Orthanc::OrthancException&) {}
+    try { Orthanc::SharedArchive::Accessor(a, second); } catch (Orthanc::OrthancException&) {}
+  }
+
+  std::list<std::string> i;
+  a.List(i);
+
+  size_t count = 0;
+  for (std::list<std::string>::const_iterator
+         it = i.begin(); it != i.end(); it++)
+  {
+    if (*it == first ||
+        *it == second)
+    {
+      count++;
+    }
+  }
+
+  ASSERT_EQ(2, count);
+}