PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/src/fitnesse/FitNesseServerTest.java

http://github.com/unclebob/fitnesse
Java | 136 lines | 111 code | 23 blank | 2 comment | 0 complexity | 79cc67b9e2033be2e2d75b284329db3a MD5 | raw file
Possible License(s): BSD-2-Clause, BSD-3-Clause, GPL-2.0
  1. // Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
  2. // Released under the terms of the CPL Common Public License version 1.0.
  3. package fitnesse;
  4. import java.util.regex.Pattern;
  5. import util.RegexTestCase;
  6. import fitnesse.components.LogData;
  7. import fitnesse.http.MockRequest;
  8. import fitnesse.http.SimpleResponse;
  9. import fitnesse.responders.ResponderFactory;
  10. import fitnesse.responders.files.SampleFileUtility;
  11. import fitnesse.testutil.MockSocket;
  12. import fitnesse.testutil.FitNesseUtil;
  13. import fitnesse.wiki.InMemoryPage;
  14. import fitnesse.wiki.PageCrawler;
  15. import fitnesse.wiki.PathParser;
  16. import fitnesse.wiki.WikiPage;
  17. import fitnesse.wiki.WikiPageDummy;
  18. import fitnesse.wiki.WikiPagePath;
  19. public class FitNesseServerTest extends RegexTestCase {
  20. private PageCrawler crawler;
  21. private WikiPage root;
  22. private WikiPagePath pageOnePath;
  23. private WikiPagePath pageOneTwoPath;
  24. private FitNesseContext context;
  25. public FitNesseServerTest() {
  26. }
  27. public void setUp() throws Exception {
  28. SampleFileUtility.makeSampleFiles();
  29. root = InMemoryPage.makeRoot("RootPage");
  30. crawler = root.getPageCrawler();
  31. pageOnePath = PathParser.parse("PageOne");
  32. pageOneTwoPath = PathParser.parse("PageOne.PageTwo");
  33. context = FitNesseUtil.makeTestContext(root);
  34. }
  35. public void tearDown() throws Exception {
  36. SampleFileUtility.deleteSampleFiles();
  37. }
  38. public void testSimple() throws Exception {
  39. crawler.addPage(root, PathParser.parse("SomePage"), "some string");
  40. String output = getSocketOutput("GET /SomePage HTTP/1.1\r\n\r\n", root);
  41. String statusLine = "HTTP/1.1 200 OK\r\n";
  42. assertTrue("Should have statusLine", Pattern.compile(statusLine, Pattern.MULTILINE).matcher(output).find());
  43. assertTrue("Should have canned Content", hasSubString("some string", output));
  44. }
  45. public void testNotFound() throws Exception {
  46. String output = getSocketOutput("GET /WikiWord HTTP/1.1\r\n\r\n", new WikiPageDummy());
  47. assertSubString("Page doesn't exist.", output);
  48. }
  49. public void testBadRequest() throws Exception {
  50. String output = getSocketOutput("Bad Request \r\n\r\n", new WikiPageDummy());
  51. assertSubString("400 Bad Request", output);
  52. assertSubString("The request string is malformed and can not be parsed", output);
  53. }
  54. public void testSomeOtherPage() throws Exception {
  55. crawler.addPage(root, pageOnePath, "Page One Content");
  56. String output = getSocketOutput("GET /PageOne HTTP/1.1\r\n\r\n", root);
  57. String expected = "Page One Content";
  58. assertTrue("Should have page one", hasSubString(expected, output));
  59. }
  60. public void testSecondLevelPage() throws Exception {
  61. crawler.addPage(root, pageOnePath, "Page One Content");
  62. crawler.addPage(root, pageOneTwoPath, "Page Two Content");
  63. String output = getSocketOutput("GET /PageOne.PageTwo HTTP/1.1\r\n\r\n", root);
  64. String expected = "Page Two Content";
  65. assertTrue("Should have page Two", hasSubString(expected, output));
  66. }
  67. public void testRelativeAndAbsoluteLinks() throws Exception {
  68. WikiPage root = InMemoryPage.makeRoot("RootPage");
  69. crawler.addPage(root, pageOnePath, "PageOne");
  70. crawler.addPage(root, pageOneTwoPath, "PageTwo");
  71. String output = getSocketOutput("GET /PageOne.PageTwo HTTP/1.1\r\n\r\n", root);
  72. String expected = "href=\"PageOne.PageTwo\".*PageTwo";
  73. assertTrue("Should have relative link", hasSubString(expected, output));
  74. crawler.addPage(root, PathParser.parse("PageTwo"), "PageTwo at root");
  75. crawler.addPage(root, PathParser.parse("PageOne.PageThree"), "PageThree has link to .PageTwo at the root");
  76. output = getSocketOutput("GET /PageOne.PageThree HTTP/1.1\r\n\r\n", root);
  77. expected = "href=\"PageTwo\".*[.]PageTwo";
  78. assertTrue("Should have absolute link", hasSubString(expected, output));
  79. }
  80. public void testServingRegularFiles() throws Exception {
  81. String output = getSocketOutput("GET /files/testDir/testFile2 HTTP/1.1\r\n\r\n", new WikiPageDummy());
  82. assertHasRegexp("file2 content", output);
  83. }
  84. public void testLoggingDataCreation() {
  85. MockRequest request = new MockRequest();
  86. SimpleResponse response = new SimpleResponse(200);
  87. MockSocket socket = new MockSocket("something");
  88. socket.setHost("1.2.3.4");
  89. request.setRequestLine("GET / HTTP/1.1");
  90. response.setContent("abc");
  91. request.setCredentials("billy", "bob");
  92. LogData data = FitNesseExpediter.makeLogData(socket, request, response);
  93. assertEquals("1.2.3.4", data.host);
  94. assertNotNull(data.time);
  95. assertEquals("GET / HTTP/1.1", data.requestLine);
  96. assertEquals(200, data.status);
  97. assertEquals(3, data.size);
  98. assertEquals("billy", data.username);
  99. }
  100. private String getSocketOutput(String requestLine, WikiPage page) throws Exception {
  101. MockSocket s = new MockSocket(requestLine);
  102. context.rootPagePath = SampleFileUtility.base;
  103. context.responderFactory = new ResponderFactory(SampleFileUtility.base);
  104. context.root = page;
  105. FitNesseServer server = new FitNesseServer(context);
  106. server.serve(s, 1000);
  107. String output = s.getOutput();
  108. return output;
  109. }
  110. private static boolean hasSubString(String expected, String output) {
  111. return Pattern.compile(expected, Pattern.MULTILINE).matcher(output).find();
  112. }
  113. }