diff options
author | Jens Baumgart | 2010-11-30 10:13:28 +0000 |
---|---|---|
committer | Matthias Sohn | 2010-11-30 14:35:45 +0000 |
commit | cfb8c6e0d57e09fa6013c2c27bb679df12455bc8 (patch) | |
tree | d488eacddceb3a4031a51867d0ea7ba99cd549c6 /org.eclipse.egit.core.test | |
parent | e9f2af26088f25a43db8c890b4be8ea641ff546b (diff) | |
download | egit-cfb8c6e0d57e09fa6013c2c27bb679df12455bc8.tar.gz egit-cfb8c6e0d57e09fa6013c2c27bb679df12455bc8.tar.xz egit-cfb8c6e0d57e09fa6013c2c27bb679df12455bc8.zip |
Implement basic authentification
Implementation of basic authentification with user and password.
User and password entered in the clone wizard are put in the Eclipse
secure store. A credentials provider was implemented that fetches
credentials from the secure store and asks the user if credentials are
not available.
Change-Id: I5239c6595e39d2a855318649fccc8fe8ac5e5fb8
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.egit.core.test')
-rw-r--r-- | org.eclipse.egit.core.test/src/org/eclipse/egit/core/securestorage/EGitSecureStoreTest.java | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/org.eclipse.egit.core.test/src/org/eclipse/egit/core/securestorage/EGitSecureStoreTest.java b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/securestorage/EGitSecureStoreTest.java new file mode 100644 index 0000000000..337f519b53 --- /dev/null +++ b/org.eclipse.egit.core.test/src/org/eclipse/egit/core/securestorage/EGitSecureStoreTest.java @@ -0,0 +1,150 @@ +/******************************************************************************* + * Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com> + * Copyright (C) 2010, Edwin Kempin <edwin.kempin@sap.com> + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +package org.eclipse.egit.core.securestorage; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; + +import javax.crypto.spec.PBEKeySpec; + +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.egit.core.test.TestUtils; +import org.eclipse.equinox.security.storage.EncodingUtils; +import org.eclipse.equinox.security.storage.ISecurePreferences; +import org.eclipse.equinox.security.storage.SecurePreferencesFactory; +import org.eclipse.equinox.security.storage.provider.IProviderHints; +import org.eclipse.jgit.transport.URIish; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class EGitSecureStoreTest { + + ISecurePreferences secureStoreForTest; + + TestUtils testUtils = new TestUtils(); + + EGitSecureStore store; + + @Before + public void setUp() throws Exception { + setupNewSecureStore(); + store = new EGitSecureStore(secureStoreForTest); + } + + @After + public void tearDown() throws Exception { + secureStoreForTest.flush(); + } + + @Test + public void testPutUserAndPassword() throws Exception { + URIish uri = new URIish("http://testRepo.example.com/testrepo"); + UserPasswordCredentials credentials = new UserPasswordCredentials( + "agitter", "letmein"); + store.putCredentials(uri, credentials); + + ISecurePreferences node = secureStoreForTest.node("/GIT/" + + EncodingUtils.encodeSlashes(uri.toString())); + assertEquals("agitter", node.get("user", null)); + assertTrue(node.isEncrypted("password")); + assertEquals("letmein", node.get("password", null)); + } + + @Test + public void testGetUserAndPassword() throws Exception { + URIish uri = new URIish("http://testRepo.example.com/testrepo"); + UserPasswordCredentials credentials = new UserPasswordCredentials( + "agitter", "letmein"); + store.putCredentials(uri, credentials); + + UserPasswordCredentials storedCredentials = store.getCredentials(uri); + assertEquals("agitter", storedCredentials.getUser()); + assertEquals("letmein", storedCredentials.getPassword()); + } + + @Test + public void testGetUserAndPasswordUnknownURI() throws Exception { + URIish uri = new URIish("http://testRepo.example.com/testrepo"); + + UserPasswordCredentials storedCredentials = store.getCredentials(uri); + assertNull(storedCredentials); + } + + @Test + public void testPutUserAndPasswordURIContainingUserAndPass() + throws Exception { + UserPasswordCredentials credentials = new UserPasswordCredentials( + "agitter", "letmein"); + store.putCredentials(new URIish( + "http://user:pass@testRepo.example.com/testrepo"), credentials); + + ISecurePreferences node = secureStoreForTest.node("/GIT/" + + EncodingUtils + .encodeSlashes("http://testRepo.example.com/testrepo")); + assertEquals("agitter", node.get("user", null)); + assertTrue(node.isEncrypted("password")); + assertEquals("letmein", node.get("password", null)); + } + + @Test + public void testGetUserAndPasswordURIContainingUserAndPass() + throws Exception { + store.putCredentials( + new URIish("http://testRepo.example.com/testrepo"), + new UserPasswordCredentials("agitter", "letmein")); + UserPasswordCredentials credentials = store.getCredentials(new URIish( + "http://agitter:letmein@testRepo.example.com/testrepo")); + assertEquals("agitter", credentials.getUser()); + assertEquals("letmein", credentials.getPassword()); + } + + @Test + public void testGetUserAndPasswordURIContainingOtherUserAndPass() + throws Exception { + store.putCredentials( + new URIish("http://testRepo.example.com/testrepo"), + new UserPasswordCredentials("agitter", "letmein")); + assertNull(store.getCredentials(new URIish( + "http://otheruser:otherpass@testRepo.example.com/testrepo"))); + } + + @Test + public void testClearCredentials() throws Exception { + URIish uri = new URIish("http://testRepo.example.com/testrepo"); + UserPasswordCredentials credentials = new UserPasswordCredentials( + "agitter", "letmein"); + store.putCredentials(uri, credentials); + store.clearCredentials(uri); + assertEquals(null, store.getCredentials(uri)); + } + + private void setupNewSecureStore() throws IOException, + MalformedURLException { + HashMap<String, Object> options = new HashMap<String, Object>(); + options.put(IProviderHints.DEFAULT_PASSWORD, new PBEKeySpec( + "masterpass".toCharArray())); + String secureStorePath = ResourcesPlugin.getWorkspace().getRoot() + .getLocation().append("testSecureStore").toOSString(); + File file = new File(secureStorePath); + testUtils.deleteRecursive(file); + URL url = file.toURI().toURL(); + secureStoreForTest = SecurePreferencesFactory.open(url, options); + secureStoreForTest.node("/GIT").removeNode(); + } + +} |