/*
* Copyright 2013 Cloud4SOA, www.cloud4soa.eu
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package eu.cloud4soa.soa.git;
import eu.cloud4soa.api.util.exception.soa.SOAException;
import eu.cloud4soa.relational.datamodel.ApplicationInstance;
import eu.cloud4soa.relational.datamodel.GitProxy;
import eu.cloud4soa.relational.datamodel.GitRepo;
import eu.cloud4soa.relational.datamodel.Paas;
import org.springframework.test.annotation.DirtiesContext;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.mockito.MockitoAnnotations;
import eu.cloud4soa.relational.datamodel.PubKey;
import java.util.ArrayList;
import java.util.List;
import eu.cloud4soa.relational.datamodel.User;
import eu.cloud4soa.relational.persistence.ApplicationInstanceRepository;
import eu.cloud4soa.relational.persistence.GitProxyRepository;
import eu.cloud4soa.relational.persistence.GitRepoRepository;
import eu.cloud4soa.relational.persistence.PaasRepository;
import eu.cloud4soa.relational.persistence.PubKeyRepository;
import eu.cloud4soa.relational.persistence.UserRepository;
import java.io.File;
import junit.framework.Assert;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.test.context.ContextConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//Let's import Mockito statically so that the code looks clearer
import static org.mockito.Mockito.*;
/**
*
* @author vinlau
*/
//@RunWith(MockitoJUnitRunner.class)
@Ignore
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext
@ContextConfiguration(locations = {"classpath:GitServiceCtx.xml"})
public class GitProxyTest {
final Logger logger = LoggerFactory.getLogger(GitProxyTest.class);
private static String originalAuthFile = null;
private static String originalGitFile = null;
@Autowired
@InjectMocks
private GitServices gitservices;;
@Mock
PubKeyRepository pubkeydao;
@Mock
UserRepository userdao;
@Mock
GitRepoRepository repodao;
@Mock
GitProxyRepository proxydao;
@Mock
PaasRepository paasdao;
@Mock
ApplicationInstanceRepository appdao;
File authTempFile;
File gitTempFile;
String userInstanceUriId = "1122334455";
@Before
public void before() throws Exception {
MockitoAnnotations.initMocks(this);
if(originalAuthFile==null)
originalAuthFile = gitservices.AUTHORIZED_KEYS_FILE;
if(originalGitFile==null)
originalGitFile = gitservices.PROXY_GIT_FILE;
this.authTempFile = File.createTempFile("authorizedKeys", ".txt");
FileUtils.copyFile(new File(originalAuthFile), this.authTempFile);
gitservices.AUTHORIZED_KEYS_FILE = this.authTempFile.getAbsolutePath();
this.gitTempFile = File.createTempFile("git", ".txt");
FileUtils.copyFile(new File(originalGitFile), this.gitTempFile);
gitservices.PROXY_GIT_FILE = this.gitTempFile.getAbsolutePath();
}
@After
public void after() throws Exception {
this.authTempFile.delete();
this.gitTempFile.delete();
}
@Test
public void testPubKey(){
String pubKey = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwqkTgZC8aZHbmgD6w+OA32fCZzCcJTi1YGb/0yDW+ugGvD6Es/KSs1SgCHcNL4DlkK4IzbIcpS6oP3+AlJPRP5ggeR3jj8KlF5Nz9CF5umkSu3jD0yikB5N8bVISabTUCZpyogzBLNKVZwqIc1JNBg0LWB49tUNmtpOEiGhDglmFaJDktWj1J8mrZvhPCEnH8r+n/0LYvdpsdHgnlgGHJBAbreBLGUo/XNIDj1Qw37h1IDCrfH52GEinqv1S9ZhSvKsH3DOvOvn6fiDwzKHrF8e/jX6qjjTOLys9lz/5eDMrH1IlRkqLGES6LM4gQZ0SiN0+FdGU5BMb4VKIOSI4DQ== cloud@localhost";
String[] array = gitservices.getC4SOAPublicKey();
logger.info(array[0].toString());
Assert.assertEquals("0", array[0]);
Assert.assertEquals(pubKey, array[1]);
}
@Test
public void testRegisterPublicKeyForUser(){
User user = new User();
user.setFullname("Test");
user.setUriID(userInstanceUriId);
user.setUsername("testUsername");
List<Object> arrayList = new ArrayList<Object>();
arrayList.add(user);
when(userdao.findBy("uriID", userInstanceUriId)).thenReturn(arrayList);
String rsa_pub_key = "aabbcc";
when(pubkeydao.findByUserAndPubkey(user, rsa_pub_key)).thenReturn(new ArrayList<PubKey>());
String[] array = gitservices.registerPublicKeyForUser(userInstanceUriId, rsa_pub_key);
Assert.assertEquals("0", array[0]);
Assert.assertEquals("OK", array[1]);
ArrayList<PubKey> arrayList1 = new ArrayList<PubKey>();
arrayList1.add(new PubKey());
when(pubkeydao.findByUserAndPubkey(user, rsa_pub_key)).thenReturn(arrayList1);
array = gitservices.registerPublicKeyForUser(userInstanceUriId, rsa_pub_key);
Assert.assertEquals("1", array[0]);
try {
String originalContent = FileUtils.readFileToString(new File(originalAuthFile));
String contentModified = FileUtils.readFileToString(authTempFile);
int compareResult = originalContent.compareTo(contentModified);
Assert.assertNotSame("File contents are equals!", 0, compareResult);
} catch (IOException ex) {
logger.error("Error in reading the file: "+ex.getMessage());
Assert.fail("Error in reading the file: "+ex.getMessage());
}
}
@Test
public void testDeletePublicKeyForUser(){
User user = new User();
user.setId(new Long(0));
user.setFullname("Test");
user.setUriID(userInstanceUriId);
user.setUsername("testUsername");
List<Object> arrayList = new ArrayList<Object>();
arrayList.add(user);
when(userdao.findBy("uriID", userInstanceUriId)).thenReturn(arrayList);
String rsa_pub_key = "aabbcc";
when(pubkeydao.findByUserAndPubkey(user, rsa_pub_key)).thenReturn(new ArrayList<PubKey>());
String[] array = gitservices.registerPublicKeyForUser(userInstanceUriId, rsa_pub_key);
Assert.assertEquals("0", array[0]);
Assert.assertEquals("OK", array[1]);
ArrayList<PubKey> arrayList1 = new ArrayList<PubKey>();
PubKey pubKey = new PubKey();
pubKey.setId(new Long(0));
arrayList1.add(pubKey);
when(pubkeydao.findByPubkey(rsa_pub_key)).thenReturn(arrayList1);
when(userdao.findBy("uriID", userInstanceUriId)).thenReturn(arrayList);
when(pubkeydao.findByUserAndPubkey(user, rsa_pub_key )).thenReturn(arrayList1);
array = gitservices.deletePublicKeyFromUser(userInstanceUriId, rsa_pub_key);
Assert.assertEquals("0", array[0]);
Assert.assertEquals("OK", array[1]);
try {
String originalContent = FileUtils.readFileToString(new File(originalAuthFile));
String contentModified = FileUtils.readFileToString(authTempFile);
int compareResult = originalContent.compareTo(contentModified);
logger.info("Compare:"+compareResult);
Assert.assertNotSame("File contents are different!", 0, compareResult);
} catch (IOException ex) {
logger.error("Error in reading the file: "+ex.getMessage());
Assert.fail("Error in reading the file: "+ex.getMessage());
}
}
@Test
public void getPublicKeysForUser() {
User user = new User();
user.setId(new Long(0));
user.setFullname("Test");
user.setUriID(userInstanceUriId);
user.setUsername("testUsername");
List<Object> userList = new ArrayList<Object>();
userList.add(user);
when(userdao.findBy("uriID", userInstanceUriId)).thenReturn(userList);
PubKey pubkey1 = new PubKey();
pubkey1.setId(new Long(0));
pubkey1.setPubkey("pubkey1");
pubkey1.setUser(user);
PubKey pubkey2 = new PubKey();
pubkey2.setId(new Long(0));
pubkey2.setPubkey("pubkey2");
pubkey2.setUser(user);
List<PubKey> pubkeysList = new ArrayList<PubKey>();
pubkeysList.add(pubkey1);
pubkeysList.add(pubkey2);
when(pubkeydao.findByUser(user)).thenReturn(pubkeysList);
try {
List<PubKey> publicKeysForUser = gitservices.getPublicKeysForUser(userInstanceUriId);
logger.info(publicKeysForUser.toString());
Assert.assertNotNull(publicKeysForUser);
Assert.assertEquals(2, publicKeysForUser.size());
} catch (SOAException ex) {
Assert.fail("SOA Error in getPublicKeysForUser: " + ex.getMessage());
} catch(Exception ex) {
logger.error("Error in getPublicKeysForUser: " + ex.getMessage());
Assert.fail("Error in getPublicKeysForUser: " + ex.getMessage());
}
}
@Test
public void testRegisterGitRepository() {
//Arguments String userInstanceUriId, String giturl, String reponame, String paasid
String GITURL = "git@heroku.com";
String GITREPONAME = "c4sapp1.git";
String PAASID = "0";
String APPID = "0";
String APPURIID = "appUriId";
//Mocks
//Mock userdao.findBy
User user = new User();
user.setId(new Long(0));
user.setFullname("Test");
user.setUriID(userInstanceUriId);
user.setUsername("testUsername");
List<Object> userList = new ArrayList<Object>();
userList.add(user);
when(userdao.findBy("uriID", userInstanceUriId)).thenReturn(userList);
//Mock paasdao.findBy
Paas paas = new Paas("Heroku", "heroku.com");
paas.setId(new Long(PAASID));
List<Object> paasList = new ArrayList<Object>();
paasList.add(paas);
when(paasdao.findBy("id", new Long(PAASID))).thenReturn(paasList);
ApplicationInstance app = new ApplicationInstance();
app.setId(new Long(APPID));
app.setUriID(APPID);
List<ApplicationInstance> appList = new ArrayList<ApplicationInstance>();
appList.add(app);
when(appdao.findByUriId(APPURIID)).thenReturn(appList);
//Mock repodao.findByGitrepo(reponame);
when( repodao.findByGitrepo(GITREPONAME) ).thenReturn(new ArrayList<GitRepo>() );
//Mock repodao.save(gitrepo);
GitRepo repo = new GitRepo();
repo.setId(new Long(0));
repo.setGitrepo(GITREPONAME);
repo.setGiturl(GITURL);
repo.setUser(user);
repo.setPaas(paas);
when(repodao.save(repo)).thenReturn(repo);
//Actual invocation
String[] ret = gitservices.registerGitRepository("", userInstanceUriId, GITURL, GITREPONAME, PAASID);
try {
Assert.assertEquals("0", ret[0]);
} catch (Exception ex) {
logger.error("Error in testRegisterGitRepository: " + ex.getMessage());
Assert.fail("Error in testRegisterGitRepository: " + ex.getMessage());
}
}
@Test
public void testRegisterGitProxy() {
//Arguments String userInstanceUriId, String proxyname
String PROXYNAME = "proxy1.git";
//Mocks
//Mock userdao.findBy("uriID", userInstanceUriId);
User user = new User();
user.setId(new Long(0));
user.setFullname("Test");
user.setUriID(userInstanceUriId);
user.setUsername("testUsername");
List<Object> userList = new ArrayList<Object>();
userList.add(user);
when(userdao.findBy("uriID", userInstanceUriId)).thenReturn(userList);
//Mock proxydao.findByProxyname(proxyname)
when(proxydao.findByProxyname(PROXYNAME)).thenReturn(new ArrayList<GitProxy>());
//Mock proxydao.save(gitproxy);
GitProxy proxy = new GitProxy();
proxy.setId(new Long(0));
proxy.setProxyname(PROXYNAME);
proxy.setUser(user);
//Invocation
String[] ret = gitservices.registerGitProxy(userInstanceUriId, PROXYNAME);
try {
Assert.assertEquals("0", ret[0]);
} catch (Exception ex) {
logger.error("Error in testRegisterGitProxy: " + ex.getMessage());
Assert.fail("Error in testRegisterGitProxy: " + ex.getMessage());
}
}
@Test
public void testBindProxytoGit() {
//Arguments String userInstanceUriId, String proxyid, String gitid
String REPOID = "0";
String GITURL = "git@heroku.com";
String GITREPONAME = "c4sapp1.git";
String PROXYID = "0";
String PROXYNAME = "proxy1.git";
//Mocks
//Mock userdao.findBy("uriID", userInstanceUriId)
User user = new User();
user.setId(new Long(0));
user.setFullname("Test");
user.setUriID(userInstanceUriId);
user.setUsername("testUsername");
List<Object> userList = new ArrayList<Object>();
userList.add(user);
when(userdao.findBy("uriID", userInstanceUriId)).thenReturn(userList);
//Mock repodao.findByUserAndGitrepoid(user, new Long(gitid))
GitRepo repo = new GitRepo();
repo.setId(new Long(0));
repo.setUser(user);
repo.setGiturl(GITURL);
repo.setGitrepo(GITREPONAME);
List<GitRepo> repos = new ArrayList<GitRepo>();
repos.add(repo);
when( repodao.findByUserAndGitrepoid(user, new Long(REPOID)) ).thenReturn(repos);
//Mock proxydao.findByUserAndGitproxyid(user,new Long(proxyid))
GitProxy proxy = new GitProxy();
proxy.setId(new Long(0));
proxy.setUser(user);
proxy.setProxyname(PROXYNAME);
List<GitProxy> proxies = new ArrayList<GitProxy>();
proxies.add(proxy);
when( proxydao.findByUserAndGitproxyid(user, new Long(PROXYID)) ).thenReturn(proxies);
//Mock proxydao.save(proxy);
proxy.setRepo(repo);
when( proxydao.save(proxy) ).thenReturn(proxy);
//Invocation
try {
String[] ret = gitservices.bindProxyToGit(userInstanceUriId, PROXYID, REPOID);
Assert.assertEquals("0", ret[0]);
String contents = FileUtils.readFileToString(gitTempFile);
logger.info("contents");
logger.info(contents);
String musthave= //"#proxy0\n"
//+ "REPO=\"c4sapp1.git\" \n"
"if [ \"$repo\" == \"'proxy1.git'\" ]; then ";
Assert.assertEquals( contents.indexOf(musthave)!=-1 , true);
} catch (Exception ex) {
logger.error("Error in testBindProxytoGit: " + ex.getMessage());
Assert.fail("Error in testBindProxytoGit: " + ex.getMessage());
}
}
}