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); } ); }