Mercurial > hg > tc-symbol-server
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