changeset 64:144160a5b010

enabled DownloadSymbolsController tests
author Evgeniy.Koshkin
date Wed, 20 Nov 2013 20:53:10 +0400
parents 9777f9420be3
children 8fcb224ce394
files .idea/runConfigurations/All_Tests.xml server-tests/src/jetbrains/buildServer/symbols/DownloadSymbolsControllerTest.java server-tests/src/jetbrains/buildServer/symbols/MetadataStorageMock.java
diffstat 3 files changed, 142 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/.idea/runConfigurations/All_Tests.xml	Wed Nov 20 20:29:58 2013 +0400
+++ b/.idea/runConfigurations/All_Tests.xml	Wed Nov 20 20:53:10 2013 +0400
@@ -1,15 +1,15 @@
 <component name="ProjectRunConfigurationManager">
   <configuration default="false" name="All Tests" type="TestNG" factoryName="TestNG">
     <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <module name="tests" />
+    <module name="server-tests" />
     <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
     <option name="ALTERNATIVE_JRE_PATH" value="" />
-    <option name="SUITE_NAME" value="$PROJECT_DIR$/tests/src/testng-fast.xml" />
-    <option name="PACKAGE_NAME" value="" />
+    <option name="SUITE_NAME" value="" />
+    <option name="PACKAGE_NAME" value="jetbrains.buildServer.symbols" />
     <option name="MAIN_CLASS_NAME" value="" />
     <option name="METHOD_NAME" value="" />
     <option name="GROUP_NAME" value="" />
-    <option name="TEST_OBJECT" value="SUITE" />
+    <option name="TEST_OBJECT" value="PACKAGE" />
     <option name="VM_PARAMETERS" value="" />
     <option name="PARAMETERS" value="" />
     <option name="WORKING_DIRECTORY" value="" />
@@ -18,7 +18,7 @@
     <option name="ENV_VARIABLES" />
     <option name="PASS_PARENT_ENVS" value="true" />
     <option name="TEST_SEARCH_SCOPE">
-      <value defaultName="moduleWithDependencies" />
+      <value defaultName="wholeProject" />
     </option>
     <option name="USE_DEFAULT_REPORTERS" value="false" />
     <option name="PROPERTIES_FILE" value="" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server-tests/src/jetbrains/buildServer/symbols/DownloadSymbolsControllerTest.java	Wed Nov 20 20:53:10 2013 +0400
@@ -0,0 +1,89 @@
+package jetbrains.buildServer.symbols;
+
+import jetbrains.buildServer.controllers.AuthorizationInterceptor;
+import jetbrains.buildServer.controllers.BaseController;
+import jetbrains.buildServer.controllers.BaseControllerTestCase;
+import jetbrains.buildServer.controllers.interceptors.auth.HttpAuthenticationManager;
+import jetbrains.buildServer.serverSide.RunningBuildEx;
+import jetbrains.buildServer.serverSide.auth.Permission;
+import jetbrains.buildServer.serverSide.auth.RoleScope;
+import jetbrains.buildServer.users.SUser;
+import org.apache.commons.httpclient.HttpStatus;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author Evgeniy.Koshkin
+ */
+public class DownloadSymbolsControllerTest extends BaseControllerTestCase {
+
+  private MetadataStorageMock myBuildMetadataStorage;
+
+  @Override
+  @BeforeMethod
+  public void setUp() throws Exception {
+    myBuildMetadataStorage = new MetadataStorageMock();
+    super.setUp();
+    myFixture.getServerSettings().setGuestLoginAllowed(true);
+  }
+
+  @Override
+  protected BaseController createController() throws IOException {
+    AuthorizationInterceptor authInterceptor = myFixture.getSingletonService(AuthorizationInterceptor.class);
+    AuthHelper authHelper = new AuthHelper(myFixture.getServerSettings(), myFixture.getUserModel(), myFixture.getSingletonService(HttpAuthenticationManager.class));
+    return new DownloadSymbolsController(myServer, myWebManager, authInterceptor,  myFixture.getSecurityContext(), myBuildMetadataStorage, authHelper);
+  }
+
+  @Test
+  public void request_pdb_simple() throws Throwable {
+    myFixture.getServerSettings().setPerProjectPermissionsEnabled(true);
+    SUser user = myFixture.getUserModel().getGuestUser();
+    user.addRole(RoleScope.projectScope(myProject.getProjectId()), getProjectDevRole());
+    assertTrue(user.isPermissionGrantedForProject(myProject.getProjectId(), Permission.VIEW_BUILD_RUNTIME_DATA));
+
+    myRequest.setRequestURI("mock", getRegisterPdbUrl("secur32.pdb", "8EF4E863187C45E78F4632152CC82FEB"));
+    doGet();
+    assertEquals(HttpStatus.SC_OK, myResponse.getStatus());
+  }
+
+  @Test
+  public void request_pdb_invalid_url() throws Exception {
+    myRequest.setRequestURI("mock", "/app/symbols/foo");
+    doGet();
+    assertEquals(HttpStatus.SC_NOT_FOUND, myResponse.getStatus());
+  }
+
+  @Test
+  public void request_not_existent_pdb() throws Exception {
+    myRequest.setRequestURI("mock", "/app/symbols/fileName/FileId2/fileName");
+    doGet();
+    assertEquals(HttpStatus.SC_NOT_FOUND, myResponse.getStatus());
+  }
+
+  @Test
+  public void request_pdb_unauthorized() throws Exception {
+    myFixture.getServerSettings().setGuestLoginAllowed(false);
+    myRequest.setRequestURI("mock", getRegisterPdbUrl("secur32.pdb", "8EF4E863187C45E78F4632152CC82FEB"));
+    doGet();
+    assertEquals(HttpStatus.SC_UNAUTHORIZED, myResponse.getStatus());
+  }
+
+  @Test
+  public void request_pdb_no_permissions_granted() throws Exception {
+    myRequest.setRequestURI("mock", getRegisterPdbUrl("secur32.pdb", "8EF4E863187C45E78F4632152CC82FEB"));
+    doGet();
+    assertEquals(HttpStatus.SC_UNAUTHORIZED, myResponse.getStatus());
+  }
+
+  private String getRegisterPdbUrl(String fileName, String fileSignature) throws IOException {
+    final File artDirectory = createTempDir();
+    new File(artDirectory, "foo").createNewFile();
+    myBuildType.setArtifactPaths(artDirectory.getAbsolutePath());
+    RunningBuildEx build = startBuild();
+    myBuildMetadataStorage.addEntry(build.getBuildId(), fileName, fileSignature);
+    return String.format("/app/symbols/%s/%s/%s", fileName, fileSignature, fileName);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server-tests/src/jetbrains/buildServer/symbols/MetadataStorageMock.java	Wed Nov 20 20:53:10 2013 +0400
@@ -0,0 +1,48 @@
+package jetbrains.buildServer.symbols;
+
+import jetbrains.buildServer.serverSide.metadata.BuildMetadataEntry;
+import jetbrains.buildServer.serverSide.metadata.MetadataStorage;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+
+class MetadataStorageMock implements MetadataStorage {
+
+  private List<BuildMetadataEntry> myEntries = new ArrayList<BuildMetadataEntry>();
+
+  public void addEntry(final long buildId, final String fileName, final String fileSignature) {
+    myEntries.add(new BuildMetadataEntry() {
+      public long getBuildId() {
+        return buildId;
+      }
+
+      @NotNull
+      public String getKey() {
+        return fileSignature;
+      }
+
+      @NotNull
+      public Map<String, String> getMetadata() {
+        HashMap<String, String> map = new HashMap<String, String>();
+        map.put(BuildSymbolsIndexProvider.ARTIFACT_PATH_KEY, "foo");
+        map.put(BuildSymbolsIndexProvider.FILE_NAME_KEY, fileName);
+        return map;
+      }
+    });
+  }
+
+  @NotNull
+  public Iterator<BuildMetadataEntry> getAllEntries(@NotNull String s) {
+    return myEntries.iterator();
+  }
+
+  @NotNull
+  public Iterator<BuildMetadataEntry> getEntriesByKey(@NotNull String s, @NotNull String s2) {
+    return myEntries.iterator();
+  }
+
+  @NotNull
+  public Iterator<BuildMetadataEntry> getBuildEntry(long l, @NotNull String s) {
+    return myEntries.iterator();
+  }
+}
\ No newline at end of file