changeset 678:fd0c1e91bd46

mercurial url support + some tests
author Pavel Sher <pavel.sher@gmail.com>
date Sun, 24 Nov 2013 17:22:43 +0100
parents e9a06ca41d46
children 1da36037196d
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialUrlSupport.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialUrlSupportTest.java mercurial-tests/src/testng.xml
diffstat 4 files changed, 116 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialUrlSupport.java	Sun Nov 24 17:22:43 2013 +0100
@@ -0,0 +1,54 @@
+package jetbrains.buildServer.buildTriggers.vcs.mercurial;
+
+import jetbrains.buildServer.vcs.*;
+import jetbrains.buildServer.vcs.impl.VcsRootImpl;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MercurialUrlSupport implements UrlSupport {
+
+  private final MercurialVcsSupport myVcsSupport;
+
+  public MercurialUrlSupport(@NotNull MercurialVcsSupport vcsSupport) {
+    myVcsSupport = vcsSupport;
+  }
+
+  @Nullable
+  public Map<String, String> convertToVcsRootProperties(@NotNull VcsUrl url) throws VcsException {
+    String fetchUrl = url.getUrl();
+
+    boolean testRequired = true;
+    MavenVcsUrl mavenUrl = url.asMavenVcsUrl();
+    if (mavenUrl != null && !"hg".equals(mavenUrl.getProviderSchema())) {
+      return null;
+    }
+
+    if (mavenUrl != null) {
+      fetchUrl = mavenUrl.getProviderSpecificPart();
+      testRequired = false;
+    }
+
+    Map<String, String> res = new HashMap<String, String>(myVcsSupport.getDefaultVcsProperties());
+    res.put(Constants.REPOSITORY_PROP, fetchUrl);
+    Credentials credentials = url.getCredentials();
+    if (credentials != null) {
+      res.put(Constants.USERNAME, credentials.getUsername());
+      res.put(Constants.PASSWORD, credentials.getPassword());
+    }
+
+    if (testRequired) {
+      try {
+        TestConnectionSupport testConnectionSupport = myVcsSupport.getTestConnectionSupport();
+        assert testConnectionSupport != null;
+        testConnectionSupport.testConnection(new VcsRootImpl(-1, res));
+      } catch (VcsException e) {
+        return null;
+      }
+    }
+
+    return res;
+  }
+}
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Thu Nov 21 17:27:45 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Sun Nov 24 17:22:43 2013 +0100
@@ -664,6 +664,10 @@
     return new ListFilesSupport(this, myConfig, myHgVcsRootFactory);
   }
 
+  @NotNull
+  public UrlSupport getUrlSupport() {
+    return new MercurialUrlSupport(this);
+  }
 
   @Override
   @Nullable
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialUrlSupportTest.java	Sun Nov 24 17:22:43 2013 +0100
@@ -0,0 +1,57 @@
+package jetbrains.buildServer.buildTriggers.vcs.mercurial;
+
+import jetbrains.buildServer.BaseTestCase;
+import jetbrains.buildServer.vcs.Credentials;
+import jetbrains.buildServer.vcs.VcsException;
+import jetbrains.buildServer.vcs.VcsUrl;
+import junit.framework.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.util.Map;
+
+import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport;
+import static junit.framework.Assert.*;
+
+@Test
+public class MercurialUrlSupportTest extends BaseMercurialTestCase {
+  private MercurialUrlSupport myUrlSupport;
+
+  @BeforeMethod
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+
+    ServerPluginConfig myPluginConfig = new ServerPluginConfigBuilder()
+            .cachesDir(myTempFiles.createTempDir())
+            .build();
+    MercurialVcsSupport vcsSupport = mercurialSupport().withConfig(myPluginConfig).build();
+    myUrlSupport = new MercurialUrlSupport(vcsSupport);
+  }
+
+  public void maven_like_url() throws VcsException {
+    VcsUrl url = new VcsUrl("scm:hg:http://host/v3", new Credentials("user1", "pass1"));
+    Map<String, String> props = myUrlSupport.convertToVcsRootProperties(url);
+    assertNotNull(props);
+
+    assertEquals("http://host/v3", props.get(Constants.REPOSITORY_PROP));
+    assertEquals("user1", props.get(Constants.USERNAME));
+    assertEquals("pass1", props.get(Constants.PASSWORD));
+  }
+
+  public void http_protocol_mercurial_repo() throws VcsException {
+    VcsUrl url = new VcsUrl("http://hg.jetbrains.org/hg/mercurial/", new Credentials("user1", "pass1"));
+    Map<String, String> props = myUrlSupport.convertToVcsRootProperties(url);
+    assertNotNull(props);
+
+    assertEquals("http://hg.jetbrains.org/hg/mercurial/", props.get(Constants.REPOSITORY_PROP));
+    assertEquals("user1", props.get(Constants.USERNAME));
+    assertEquals("pass1", props.get(Constants.PASSWORD));
+  }
+
+  public void http_protocol_svn_repo() throws VcsException {
+    VcsUrl url = new VcsUrl("http://svn.jetbrains.org/teamcity/plugins/xml-tests-reporting/trunk");
+    Map<String, String> props = myUrlSupport.convertToVcsRootProperties(url);
+    assertNull(props);
+  }
+}
--- a/mercurial-tests/src/testng.xml	Thu Nov 21 17:27:45 2013 +0400
+++ b/mercurial-tests/src/testng.xml	Sun Nov 24 17:22:43 2013 +0100
@@ -36,6 +36,7 @@
       <class name="jetbrains.buildServer.buildTriggers.vcs.mercurial.TagsTest"/>
       <class name="jetbrains.buildServer.buildTriggers.vcs.mercurial.CommitsInfoBuilderSupportTest"/>
       <class name="jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialModificationInfoBuilderTest"/>
+      <class name="jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialUrlSupportTest"/>
     </classes>
   </test>
 </suite>