PageRenderTime 48ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-functional-tests/jira-func-tests/src/main/java/com/atlassian/jira/webtests/ztests/admin/trustedapps/TestTrustedApplications.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 350 lines | 284 code | 45 blank | 21 comment | 3 complexity | 5710668e31301d08dbab5c02a7ac429f MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.webtests.ztests.admin.trustedapps;
  2. import com.atlassian.jira.functest.framework.Administration;
  3. import com.atlassian.jira.functest.framework.BaseJiraFuncTest;
  4. import com.atlassian.jira.functest.framework.LoginAs;
  5. import com.atlassian.jira.functest.framework.suite.Category;
  6. import com.atlassian.jira.functest.framework.suite.WebTest;
  7. import com.meterware.httpunit.HttpUnitOptions;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10. import javax.inject.Inject;
  11. import java.io.IOException;
  12. import java.net.ConnectException;
  13. import java.net.HttpURLConnection;
  14. import java.net.MalformedURLException;
  15. import java.net.URL;
  16. import static com.atlassian.jira.functest.framework.FunctTestConstants.ADMIN_PASSWORD;
  17. import static com.atlassian.jira.functest.framework.FunctTestConstants.ADMIN_USERNAME;
  18. @WebTest({Category.FUNC_TEST, Category.ADMINISTRATION, Category.BROWSING})
  19. @LoginAs(user = ADMIN_USERNAME)
  20. public class TestTrustedApplications extends BaseJiraFuncTest {
  21. private static final String REQUEST_NEW_TRUSTED_APP_DETAILS = "Request New Trusted Application Details";
  22. @Inject
  23. private Administration administration;
  24. @Before
  25. public void setUp() {
  26. administration.restoreData("TestTrustedAppsBlank.xml");
  27. }
  28. @Test
  29. public void testAdminLinkWorks() {
  30. navigation.gotoAdmin();
  31. gotoViewTrustedAppsConfigs();
  32. tester.assertTextPresent("View Trusted Applications");
  33. tester.assertTextPresent(REQUEST_NEW_TRUSTED_APP_DETAILS);
  34. tester.assertTextPresent("No trusted applications have been configured.");
  35. }
  36. private void gotoViewTrustedAppsConfigs() {
  37. tester.gotoPage("/secure/admin/trustedapps/ViewTrustedApplications.jspa");
  38. }
  39. @Test
  40. public void testRequestSelf() {
  41. final String trustedAppName = "theTrustedApplicationName";
  42. navigation.gotoAdmin();
  43. gotoViewTrustedAppsConfigs();
  44. tester.setFormElement("trustedAppBaseUrl", getEnvironmentData().getBaseUrl().toExternalForm());
  45. tester.submit("Send Request");
  46. tester.setWorkingForm("jiraform");
  47. tester.assertTextPresent("Add New Trusted Application");
  48. tester.setFormElement("name", trustedAppName);
  49. tester.assertTextPresent("Application Name");
  50. tester.assertTextPresent("Application ID");
  51. tester.assertTextPresent("Timeout");
  52. tester.assertTextPresent("IP Address Matches");
  53. tester.assertTextPresent("URL Paths to Allow");
  54. tester.assertButtonNotPresent("Update");
  55. tester.submit("Add");
  56. tester.assertTextPresent("View Trusted Applications");
  57. tester.assertTextPresent(trustedAppName);
  58. tester.assertLinkPresent("edit-10010");
  59. tester.assertLinkPresent("delete-10010");
  60. boolean wasEnabled = HttpUnitOptions.isScriptingEnabled();
  61. HttpUnitOptions.setScriptingEnabled(true);
  62. try {
  63. tester.clickLink("edit-10010");
  64. tester.setWorkingForm("jiraform");
  65. tester.assertTextPresent("Edit Trusted Application Details");
  66. tester.assertButtonPresent("update_submit");
  67. tester.assertButtonNotPresent("add_submit");
  68. tester.clickLink("cancelButton");
  69. tester.assertTextPresent("View Trusted Applications");
  70. tester.clickLink("delete-10010");
  71. tester.setWorkingForm("jiraform");
  72. tester.assertTextPresent("Delete Trusted Application:");
  73. tester.assertTextPresent(trustedAppName);
  74. tester.assertButtonPresent("delete_submit");
  75. tester.clickLink("cancelButton");
  76. } finally {
  77. HttpUnitOptions.setScriptingEnabled(wasEnabled);
  78. }
  79. tester.assertTextPresent("View Trusted Applications");
  80. tester.clickLink("delete-10010");
  81. tester.setWorkingForm("jiraform");
  82. tester.submit("Delete");
  83. tester.assertTextPresent("View Trusted Applications");
  84. tester.assertTextNotPresent(trustedAppName);
  85. tester.assertLinkNotPresent("edit-10010");
  86. tester.assertLinkNotPresent("delete-10010");
  87. tester.assertTextPresent("No trusted applications have been configured.");
  88. }
  89. @Test
  90. public void testRequestSelfTwice() {
  91. navigation.gotoAdmin();
  92. gotoViewTrustedAppsConfigs();
  93. tester.setFormElement("trustedAppBaseUrl", getEnvironmentData().getBaseUrl().toExternalForm());
  94. tester.submit("Send Request");
  95. tester.setWorkingForm("jiraform");
  96. tester.assertTextPresent("Add New Trusted Application");
  97. tester.setFormElement("name", "theTrustedApplicationName");
  98. tester.submit("Add");
  99. tester.setFormElement("trustedAppBaseUrl", getEnvironmentData().getBaseUrl().toExternalForm());
  100. tester.submit("Send Request");
  101. tester.setWorkingForm("jiraform");
  102. tester.assertTextPresent("Add New Trusted Application");
  103. tester.setFormElement("name", "anuvverTrustedApplicationName");
  104. tester.submit("Add");
  105. tester.assertTextPresent("The Trusted Application with the specified applicationId");
  106. tester.assertTextPresent("already exists");
  107. }
  108. @Test
  109. public void testDirectBrowseWithNoPermission() {
  110. navigation.login("regularadmin", "regularadmin");
  111. navigation.gotoAdmin();
  112. tester.assertLinkNotPresent("trusted_apps");
  113. gotoViewTrustedAppsConfigs();
  114. tester.assertTextNotPresent("View Trusted Applications");
  115. tester.gotoPage("/secure/admin/trustedapps/EditTrustedApplication!default.jspa");
  116. tester.assertTextNotPresent("Edit Trusted Application");
  117. tester.gotoPage("/secure/admin/trustedapps/DeleteTrustedApplication!default.jspa");
  118. tester.assertTextNotPresent("Delete Trusted Application");
  119. }
  120. @Test
  121. public void testRequestAppBadUrl() {
  122. navigation.login(ADMIN_USERNAME, ADMIN_PASSWORD);
  123. navigation.gotoAdmin();
  124. gotoViewTrustedAppsConfigs();
  125. // malformed URL
  126. tester.setFormElement("trustedAppBaseUrl", "junkUrl-9287349287349");
  127. tester.submit("Send Request");
  128. // since url was bad, shouldn't have left the page
  129. tester.assertTextPresent(REQUEST_NEW_TRUSTED_APP_DETAILS);
  130. tester.assertTextPresent("java.net.MalformedURLException:");
  131. // unknown host
  132. final String unknownUrl = "http://www.something.invalid/";
  133. tester.setFormElement("trustedAppBaseUrl", unknownUrl);
  134. tester.submit("Send Request");
  135. tester.assertTextPresent(REQUEST_NEW_TRUSTED_APP_DETAILS);
  136. tester.assertTextPresent("The host " + unknownUrl + " could not be found");
  137. // known host with no certificate
  138. final String noTrustUrl = "http://www.google.com";
  139. tester.setFormElement("trustedAppBaseUrl", noTrustUrl);
  140. tester.submit("Send Request");
  141. tester.assertTextPresent(REQUEST_NEW_TRUSTED_APP_DETAILS);
  142. tester.assertTextPresent("The application at URL " + noTrustUrl + " does not support the Trusted Application protocol.");
  143. // JRA-16003: known host with no certificate and whitespace - should be the same error
  144. final String noTrustUrlWhitespace = " http://www.google.com ";
  145. tester.setFormElement("trustedAppBaseUrl", noTrustUrlWhitespace);
  146. tester.submit("Send Request");
  147. tester.assertTextPresent(REQUEST_NEW_TRUSTED_APP_DETAILS);
  148. tester.assertTextPresent("The application at URL " + noTrustUrlWhitespace.trim() + " does not support the Trusted Application protocol.");
  149. // known host which refuses connection - add a 1 to the port - may not work if port isn't explicit
  150. final String wrongTrustUrl = getUnlistenedURL();
  151. tester.setFormElement("trustedAppBaseUrl", wrongTrustUrl);
  152. tester.submit("Send Request");
  153. tester.assertTextPresent(REQUEST_NEW_TRUSTED_APP_DETAILS);
  154. tester.assertTextPresent("The host " + wrongTrustUrl + " could not be found.");
  155. }
  156. @Test
  157. public void testAddEditValidation() {
  158. final String trustedAppName = "theTrustedApplicationName";
  159. navigation.gotoAdmin();
  160. gotoViewTrustedAppsConfigs();
  161. tester.setFormElement("trustedAppBaseUrl", getEnvironmentData().getBaseUrl().toExternalForm());
  162. tester.submit("Send Request");
  163. // don't set name
  164. tester.setWorkingForm("jiraform");
  165. tester.setFormElement("name", "");
  166. tester.submit("Add");
  167. tester.assertTextPresent("Add New Trusted Application");
  168. tester.assertTextPresent("The Trusted Application Name cannot be blank.");
  169. // don't set timeout
  170. tester.setWorkingForm("jiraform");
  171. tester.setFormElement("name", trustedAppName);
  172. tester.setFormElement("timeout", "");
  173. tester.submit("Add");
  174. tester.assertTextPresent("Add New Trusted Application");
  175. tester.assertTextPresent("You must specify a positive Timeout value.");
  176. // set timeout to NaN
  177. tester.setWorkingForm("jiraform");
  178. tester.setFormElement("timeout", "asdasd");
  179. tester.submit("Add");
  180. tester.assertTextPresent("Add New Trusted Application");
  181. tester.assertTextPresent("You must specify a positive Timeout value.");
  182. // set timeout to negative number
  183. tester.setWorkingForm("jiraform");
  184. tester.setFormElement("timeout", "-8888");
  185. tester.submit("Add");
  186. tester.assertTextPresent("Add New Trusted Application");
  187. tester.assertTextPresent("You must specify a positive Timeout value.");
  188. // set timeout to zero
  189. tester.setWorkingForm("jiraform");
  190. tester.setFormElement("timeout", "0");
  191. tester.submit("Add");
  192. tester.assertTextPresent("Add New Trusted Application");
  193. tester.assertTextPresent("You must specify a positive Timeout value.");
  194. // set timeout to larger than Long.MAX_VALUE
  195. tester.setWorkingForm("jiraform");
  196. tester.setFormElement("timeout", "9223372036854775808");
  197. tester.submit("Add");
  198. tester.assertTextPresent("Add New Trusted Application");
  199. tester.assertTextPresent("You must specify a positive Timeout value.");
  200. // IP match string cannot be blank
  201. tester.setWorkingForm("jiraform");
  202. tester.setFormElement("timeout", "1000");
  203. tester.setFormElement("ipMatch", "");
  204. tester.submit("Add");
  205. tester.assertTextPresent("Add New Trusted Application");
  206. tester.assertTextPresent("You must specify IP addresses to match against.");
  207. // URL match string cannot be blank
  208. tester.setWorkingForm("jiraform");
  209. tester.setFormElement("timeout", "1000");
  210. tester.setFormElement("urlMatch", "");
  211. tester.submit("Add");
  212. tester.assertTextPresent("Add New Trusted Application");
  213. tester.assertTextPresent("You must specify URLs to match against.");
  214. {
  215. // malformed IP address
  216. final String malformedIp = "blah";
  217. tester.setWorkingForm("jiraform");
  218. tester.setFormElement("timeout", "1000");
  219. tester.setFormElement("ipMatch", malformedIp);
  220. tester.submit("Add");
  221. tester.assertTextPresent("Add New Trusted Application");
  222. assertBadIPMessage(malformedIp);
  223. }
  224. {
  225. // non IPv4 address
  226. final String malformedIp = "123.123.123.123.1.1";
  227. tester.setWorkingForm("jiraform");
  228. tester.setFormElement("timeout", "1000");
  229. tester.setFormElement("ipMatch", malformedIp);
  230. tester.submit("Add");
  231. tester.assertTextPresent("Add New Trusted Application");
  232. assertBadIPMessage(malformedIp);
  233. }
  234. {
  235. // greater than 255
  236. final String malformedIp = "299.299.299.299";
  237. tester.setWorkingForm("jiraform");
  238. tester.setFormElement("timeout", "1000");
  239. tester.setFormElement("ipMatch", malformedIp);
  240. tester.submit("Add");
  241. tester.assertTextPresent("Add New Trusted Application");
  242. assertBadIPMessage(malformedIp);
  243. }
  244. {
  245. // illegal separator
  246. final String malformedIp = "192,168,0,1";
  247. tester.setWorkingForm("jiraform");
  248. tester.setFormElement("timeout", "1000");
  249. tester.setFormElement("ipMatch", malformedIp);
  250. tester.submit("Add");
  251. tester.assertTextPresent("Add New Trusted Application");
  252. assertBadIPMessage(malformedIp);
  253. }
  254. {
  255. // illegal wildcard character
  256. final String malformedIp = "192.168.?.1";
  257. tester.setWorkingForm("jiraform");
  258. tester.setFormElement("timeout", "1000");
  259. tester.setFormElement("ipMatch", malformedIp);
  260. tester.submit("Add");
  261. tester.assertTextPresent("Add New Trusted Application");
  262. assertBadIPMessage(malformedIp);
  263. }
  264. {
  265. // multiple IP addresses (works)
  266. final String malformedIp = "123.123.123.123\n192.168.0.1";
  267. tester.setWorkingForm("jiraform");
  268. tester.setFormElement("timeout", "1000");
  269. tester.setFormElement("ipMatch", malformedIp);
  270. tester.setFormElement("urlMatch", "/some/url");
  271. tester.submit("Add");
  272. tester.assertTextPresent("View Trusted Applications");
  273. tester.assertTextPresent(trustedAppName);
  274. tester.assertLinkPresent("delete-10010");
  275. }
  276. }
  277. private void assertBadIPMessage(String malformedIp) {
  278. tester.assertTextPresent("The IP address pattern: " + malformedIp + " is invalid.");
  279. }
  280. private String getUnlistenedURL() {
  281. String host = "http://localhost:";
  282. int port = 8000;
  283. while (true) {
  284. URL url;
  285. try {
  286. url = new URL(host + ++port);
  287. } catch (MalformedURLException e) {
  288. throw new RuntimeException(e);
  289. }
  290. HttpURLConnection connection = null;
  291. try {
  292. connection = (HttpURLConnection) url.openConnection();
  293. connection.connect();
  294. } catch (ConnectException e) {
  295. return url.toExternalForm();
  296. } catch (IOException ignoreAndContinue) {
  297. // ignore and try next port
  298. } finally {
  299. if (connection != null) {
  300. connection.disconnect();
  301. }
  302. }
  303. }
  304. }
  305. }