public void GetParsedTopic()
        {
            DoTest(delegate(TestParameters<TopicCacheProvider> parameters)
            {
                ClearCache(parameters.Cache);
                QualifiedTopicRevision topicRevision = new QualifiedTopicRevision("TopicOne", "NamespaceOne");
                ParsedTopic firstRetrieval = parameters.Provider.GetParsedTopic(
                    topicRevision.AsUnqualifiedTopicRevision());
                AssertCacheContainsParsedTopic(parameters.Cache, firstRetrieval);
                ParsedTopic secondRetrieval = parameters.Provider.GetParsedTopic(
                    topicRevision.AsUnqualifiedTopicRevision());
                Assert.AreSame(firstRetrieval, secondRetrieval,
                    "Checking that the cached parsed topic is returned.");
                ClearCache(parameters.Cache);
                ParsedTopic thirdRetrieval = parameters.Provider.GetParsedTopic(
                    topicRevision.AsUnqualifiedTopicRevision());
                Assert.IsFalse(object.ReferenceEquals(firstRetrieval, thirdRetrieval),
                    "Checking that after the cache is cleared, a new parsed topic is retrieved.");

                // There was a bug in early versions where the TopicCacheProvider would cache
                // topics without a namespace, serving up the wrong topic at times.
                NamespaceManager otherManager = parameters.Federation.NamespaceManagerForNamespace("NamespaceTwo");
                TopicCacheProvider otherProvider = otherManager.GetProvider(typeof(TopicCacheProvider)) as
                    TopicCacheProvider;

                ParsedTopic otherParsedTopic = otherProvider.GetParsedTopic(
                    topicRevision.AsUnqualifiedTopicRevision());

                Assert.IsFalse(object.ReferenceEquals(thirdRetrieval, otherParsedTopic),
                    "Checking that the provider does not accidentially cache topics from two namespaces under the same key");
            }
            );
        }
        public void WriteTopic()
        {
            DoTest(delegate(TestParameters<TopicCacheProvider> parameters)
            {
                ClearCache(parameters.Cache);
                QualifiedTopicRevision topicRevision = new QualifiedTopicRevision("TopicOne", "NamespaceOne");
                ParsedTopic firstRetrieval = parameters.Provider.GetParsedTopic(
                    topicRevision.AsUnqualifiedTopicRevision());
                parameters.Manager.WriteTopicAndNewVersion(
                    topicRevision.AsUnqualifiedTopicRevision().AsUnqualifiedTopicName(),
                    "New content", "test");
                ParsedTopic secondRetrieval = parameters.Provider.GetParsedTopic(
                    topicRevision.AsUnqualifiedTopicRevision());

                Assert.IsFalse(object.ReferenceEquals(firstRetrieval, secondRetrieval),
                    "Checking that a write flushes the cache for a parsed topic.");

                ParsedTopic thirdRetrieval = parameters.Provider.GetParsedTopic(
                    topicRevision.AsUnqualifiedTopicRevision());
                Assert.AreSame(secondRetrieval, thirdRetrieval,
                    "Checking that subsequent retrievals return from cache.");
            }
            );
        }
 public void DeleteTopic()
 {
     DoTest(delegate(TestParameters<TopicCacheProvider> parameters)
     {
         ClearCache(parameters.Cache);
         QualifiedTopicRevision topicOneRevision = new QualifiedTopicRevision("TopicOne", "NamespaceOne");
         QualifiedTopicRevision topicTwoRevision = new QualifiedTopicRevision("TopicTwo", "NamespaceOne");
         ParsedTopic firstRetrieval = parameters.Provider.GetParsedTopic(
             topicOneRevision.AsUnqualifiedTopicRevision());
         ParsedTopic secondRetrieval = parameters.Provider.GetParsedTopic(
             topicTwoRevision.AsUnqualifiedTopicRevision());
         AssertCacheContainsParsedTopic(parameters.Cache, firstRetrieval);
         AssertCacheContainsParsedTopic(parameters.Cache, secondRetrieval);
         parameters.Provider.DeleteTopic(
             topicOneRevision.AsUnqualifiedTopicRevision().AsUnqualifiedTopicName(), false);
         AssertCacheDoesNotContainsParsedTopic(parameters.Cache, firstRetrieval);
         AssertCacheContainsParsedTopic(parameters.Cache, secondRetrieval);
     }
     );
 }