public virtual void DoTest(Blog blog, IBlogClient blogClient, XmlElement providerEl) { TestResultImpl results = new TestResultImpl(); DoTest(blog, blogClient, results); results.ForEach(delegate (string key, string value) { XmlElement optionsEl = (XmlElement)providerEl.SelectSingleNode("options"); if (optionsEl == null) { optionsEl = providerEl.OwnerDocument.CreateElement("options"); providerEl.AppendChild(optionsEl); } XmlElement el = (XmlElement)optionsEl.SelectSingleNode(key); if (el == null) { el = providerEl.OwnerDocument.CreateElement(key); optionsEl.AppendChild(el); } if (!el.HasAttribute("readonly", NAMESPACE_BLOGRUNNER)) { el.InnerText = value; } }); }
protected internal override void PreparePost(Blog blog, IBlogClient blogClient, OpenLiveWriter.Extensibility.BlogClient.BlogPost blogPost, ref bool? publish) { BlogPostCategory[] categories = blogClient.GetCategories(blog.BlogId); if (categories.Length < 2) throw new InvalidOperationException("Blog " + blog.HomepageUrl + " does not have enough categories for the SupportsMultipleCategories test to be performed"); BlogPostCategory[] newCategories = new BlogPostCategory[2]; newCategories[0] = categories[0]; newCategories[1] = categories[1]; blogPost.Categories = newCategories; }
public void RunTests(Provider provider, Blog blog, XmlElement providerEl) { using (new BlogClientUIContextSilentMode()) //supress prompting for credentials { TemporaryBlogCredentials credentials = new TemporaryBlogCredentials(); credentials.Username = blog.Username; credentials.Password = blog.Password; BlogCredentialsAccessor credentialsAccessor = new BlogCredentialsAccessor(Guid.NewGuid().ToString(), credentials); IBlogClient client = BlogClientManager.CreateClient(provider.ClientType, blog.ApiUrl, credentialsAccessor); if (blog.BlogId == null) { BlogInfo[] blogs = client.GetUsersBlogs(); if (blogs.Length == 1) { blog.BlogId = blogs[0].Id; credentialsAccessor = new BlogCredentialsAccessor(blog.BlogId, credentials); client = BlogClientManager.CreateClient(provider.ClientType, blog.ApiUrl, credentialsAccessor); } } foreach (Test test in tests) { try { Console.WriteLine("Running test " + test.ToString()); test.DoTest(blog, client, providerEl); } catch (Exception e) { Console.Error.WriteLine("Error: Test " + test.GetType().Name + " failed for provider " + provider.Name + ":"); Console.Error.WriteLine(e.ToString()); } } } }
public sealed override void DoTest(Blog blog, IBlogClient blogClient, ITestResults results) { BlogPost blogPost = new BlogPost(); bool? publish = null; PreparePost(blogPost, ref publish); string token = BlogUtil.ShortGuid; blogPost.Title = token + ":" + blogPost.Title; string etag; XmlDocument remotePost; string postId = blogClient.NewPost(blog.BlogId, blogPost, null, publish ?? true, out etag, out remotePost); try { RetryUntilTimeout(TimeoutDuration, delegate { using (HttpWebResponse response = HttpRequestHelper.SendRequest(blog.HomepageUrl)) { using (Stream stream = response.GetResponseStream()) { string html = Encoding.ASCII.GetString(StreamHelper.AsBytes(stream)); if (html.Contains(token)) { HandleResult(html, results); return true; } Thread.Sleep(1000); return false; } } }); } catch (TimeoutException te) { if (!HandleTimeout(te, results)) throw; } if (postId != null && CleanUpPosts) blogClient.DeletePost(blog.BlogId, postId, false); }
public abstract void DoTest(Blog blog, IBlogClient blogClient, ITestResults results);
public sealed override void DoTest(Blog blog, IBlogClient blogClient, ITestResults results) { BlogPost blogPost = new BlogPost(); bool? publish = null; PreparePost(blog, blogClient, blogPost, ref publish); string token = BlogUtil.ShortGuid; blogPost.Title = token + ":" + blogPost.Title; string etag; XmlDocument remotePost; string postId = blogClient.NewPost(blog.BlogId, blogPost, null, publish ?? true, out etag, out remotePost); BlogPost newPost = blogClient.GetPost(blog.BlogId, postId); HandleResult(newPost, results); if (postId != null && CleanUpPosts) blogClient.DeletePost(blog.BlogId, postId, false); }
protected internal abstract void PreparePost(Blog blog, IBlogClient blogClient, BlogPost blogPost, ref bool? publish);
public BlogUtil(Blog blog, IBlogClient client) { this.blog = blog; this.client = client; }