Пример #1
0
        public void TestValueBuffer()
        {
            ValueBuffer vb = new ValueBuffer();

            Dictionary <string, object> testValues = new Dictionary <string, object>();

            testValues.Add("strVal", "hoi²³²³1234");
            testValues.Add("intVal", 112312341);
            testValues.Add("doubleVal", double.MaxValue);
            testValues.Add("class", new StringBuilder().Append("asdfa"));

            foreach (KeyValuePair <string, object> item in testValues)
            {
                Assert.IsNull(vb.getVal(item.Key));
            }
            foreach (KeyValuePair <string, object> item in testValues)
            {
                vb.setVal(item.Key, item.Value, TimeSpan.FromSeconds(1));
            }
            Assert.AreEqual(testValues.Count, vb.TotalCount);

            foreach (KeyValuePair <string, object> item in testValues)
            {
                Assert.IsFalse(vb.needsRefresh(item.Key));
                Assert.AreEqual(item.Value, vb.getVal(item.Key));
            }
            DateTime sta = DateTime.UtcNow;

            while (sta.AddSeconds(1) > DateTime.UtcNow)
            {
                System.Threading.Thread.Sleep(100);
            }

            // Values are still in there, but expired!
            foreach (KeyValuePair <string, object> item in testValues)
            {
                Assert.IsTrue(vb.needsRefresh(item.Key));
                Assert.AreEqual(item.Value, vb.getVal(item.Key, true));
                Assert.AreEqual(null, vb.getVal(item.Key, false));
            }
            string seckey = "ThisIsANewKey_SoThisNeedsAlawysARefresh";

            Assert.IsTrue(vb.needsRefresh(seckey));
            Assert.IsNull(vb.getVal(seckey));

            vb.setVal(seckey, "value", TimeSpan.FromSeconds(1));

            vb.cleanOlds();

            Assert.AreEqual("value", vb.getVal(seckey));
            Assert.AreEqual(1, vb.TotalCount);

            foreach (KeyValuePair <string, object> item in testValues)
            {
                Assert.IsTrue(vb.needsRefresh(item.Key));
                Assert.IsNull(vb.getVal(item.Key));
            }

            sta = DateTime.UtcNow;
            while (sta.AddSeconds(1) > DateTime.UtcNow)
            {
                System.Threading.Thread.Sleep(100);
            }

            vb.cleanOlds();

            Assert.AreEqual(0, vb.TotalCount);
        }