comparison OrthancFramework/UnitTestsSources/FromDcmtkTests.cpp @ 4457:789676a8c96a

Refactoring and improvements to the cache of DICOM files in ServerContext
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 19 Jan 2021 19:05:04 +0100
parents 3e4f7b7840f0
children fe774d8e904b
comparison
equal deleted inserted replaced
4456:3e4f7b7840f0 4457:789676a8c96a
2086 2086
2087 2087
2088 TEST(ParsedDicomCache, Basic) 2088 TEST(ParsedDicomCache, Basic)
2089 { 2089 {
2090 ParsedDicomCache cache(10); 2090 ParsedDicomCache cache(10);
2091 ASSERT_EQ(0, cache.GetCurrentSize()); 2091 ASSERT_EQ(0u, cache.GetCurrentSize());
2092 ASSERT_EQ(0u, cache.GetNumberOfItems());
2092 2093
2093 DicomMap tags; 2094 DicomMap tags;
2094 tags.SetValue(DICOM_TAG_PATIENT_ID, "patient1", false); 2095 tags.SetValue(DICOM_TAG_PATIENT_ID, "patient1", false);
2095 cache.Acquire("a", new ParsedDicomFile(tags, Encoding_Latin1, true), 20); 2096 cache.Acquire("a", new ParsedDicomFile(tags, Encoding_Latin1, true), 20);
2096 ASSERT_EQ(20, cache.GetCurrentSize()); 2097 ASSERT_EQ(20u, cache.GetCurrentSize());
2098 ASSERT_EQ(1u, cache.GetNumberOfItems());
2097 2099
2098 { 2100 {
2099 ParsedDicomCache::Accessor accessor(cache, "b"); 2101 ParsedDicomCache::Accessor accessor(cache, "b");
2100 ASSERT_FALSE(accessor.IsValid()); 2102 ASSERT_FALSE(accessor.IsValid());
2101 ASSERT_THROW(accessor.GetDicom(), OrthancException); 2103 ASSERT_THROW(accessor.GetDicom(), OrthancException);
2111 ASSERT_EQ(20u, accessor.GetFileSize()); 2113 ASSERT_EQ(20u, accessor.GetFileSize());
2112 } 2114 }
2113 2115
2114 tags.SetValue(DICOM_TAG_PATIENT_ID, "patient2", false); 2116 tags.SetValue(DICOM_TAG_PATIENT_ID, "patient2", false);
2115 cache.Acquire("b", new ParsedDicomFile(tags, Encoding_Latin1, true), 5); 2117 cache.Acquire("b", new ParsedDicomFile(tags, Encoding_Latin1, true), 5);
2116 ASSERT_EQ(5, cache.GetCurrentSize()); 2118 ASSERT_EQ(5u, cache.GetCurrentSize());
2119 ASSERT_EQ(1u, cache.GetNumberOfItems());
2117 2120
2118 cache.Acquire("c", new ParsedDicomFile(true), 5); 2121 cache.Acquire("c", new ParsedDicomFile(true), 5);
2119 ASSERT_EQ(10, cache.GetCurrentSize()); 2122 ASSERT_EQ(10u, cache.GetCurrentSize());
2123 ASSERT_EQ(2u, cache.GetNumberOfItems());
2120 2124
2121 { 2125 {
2122 ParsedDicomCache::Accessor accessor(cache, "b"); 2126 ParsedDicomCache::Accessor accessor(cache, "b");
2123 ASSERT_TRUE(accessor.IsValid()); 2127 ASSERT_TRUE(accessor.IsValid());
2124 std::string s; 2128 std::string s;
2126 ASSERT_EQ("patient2", s); 2130 ASSERT_EQ("patient2", s);
2127 ASSERT_EQ(5u, accessor.GetFileSize()); 2131 ASSERT_EQ(5u, accessor.GetFileSize());
2128 } 2132 }
2129 2133
2130 cache.Acquire("d", new ParsedDicomFile(true), 5); 2134 cache.Acquire("d", new ParsedDicomFile(true), 5);
2131 ASSERT_EQ(10, cache.GetCurrentSize()); 2135 ASSERT_EQ(10u, cache.GetCurrentSize());
2136 ASSERT_EQ(2u, cache.GetNumberOfItems());
2132 2137
2133 ASSERT_TRUE(ParsedDicomCache::Accessor(cache, "b").IsValid()); 2138 ASSERT_TRUE(ParsedDicomCache::Accessor(cache, "b").IsValid());
2134 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "c").IsValid()); // recycled by LRU 2139 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "c").IsValid()); // recycled by LRU
2135 ASSERT_TRUE(ParsedDicomCache::Accessor(cache, "d").IsValid()); 2140 ASSERT_TRUE(ParsedDicomCache::Accessor(cache, "d").IsValid());
2136 2141
2142 cache.Invalidate("d");
2143 ASSERT_EQ(5u, cache.GetCurrentSize());
2144 ASSERT_EQ(1u, cache.GetNumberOfItems());
2145 ASSERT_TRUE(ParsedDicomCache::Accessor(cache, "b").IsValid());
2146 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "d").IsValid());
2147
2137 cache.Acquire("e", new ParsedDicomFile(true), 15); 2148 cache.Acquire("e", new ParsedDicomFile(true), 15);
2138 ASSERT_EQ(15, cache.GetCurrentSize()); 2149 ASSERT_EQ(15u, cache.GetCurrentSize());
2150 ASSERT_EQ(1u, cache.GetNumberOfItems());
2139 2151
2140 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "c").IsValid()); 2152 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "c").IsValid());
2141 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "d").IsValid()); 2153 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "d").IsValid());
2142 ASSERT_TRUE(ParsedDicomCache::Accessor(cache, "e").IsValid()); 2154 ASSERT_TRUE(ParsedDicomCache::Accessor(cache, "e").IsValid());
2155
2156 cache.Invalidate("e");
2157 ASSERT_EQ(0u, cache.GetCurrentSize());
2158 ASSERT_EQ(0u, cache.GetNumberOfItems());
2159 ASSERT_FALSE(ParsedDicomCache::Accessor(cache, "e").IsValid());
2143 } 2160 }
2144 2161
2145 2162
2146 2163
2147 2164