/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * 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 * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.ssh.server.spi.tck; import org.eclipse.che.api.core.ConflictException; import org.eclipse.che.api.core.NotFoundException; import org.eclipse.che.api.ssh.server.model.impl.SshPairImpl; import org.eclipse.che.api.ssh.server.spi.SshDao; import org.eclipse.che.api.user.server.model.impl.UserImpl; import org.eclipse.che.commons.lang.NameGenerator; import org.eclipse.che.commons.test.tck.TckListener; import org.eclipse.che.commons.test.tck.repository.TckRepository; import org.eclipse.che.commons.test.tck.repository.TckRepositoryException; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import javax.inject.Inject; import java.util.Arrays; import java.util.HashSet; import java.util.List; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; /** * Tests {@link SshDao} interface contract. * * @author Mihail Kuznyetsov. * @author Yevhenii Voevodin */ @Listeners(TckListener.class) @Test(suiteName = SshDaoTest.SUITE_NAME) public class SshDaoTest { public static final String SUITE_NAME = "SshDaoTck"; private static final int COUNT_OF_PAIRS = 6; private static final int COUNT_OF_USERS = 3; SshPairImpl[] pairs; @Inject private SshDao sshDao; @Inject private TckRepository<SshPairImpl> sshRepository; @Inject private TckRepository<UserImpl> userRepository; @BeforeMethod public void setUp() throws TckRepositoryException { UserImpl[] users = new UserImpl[COUNT_OF_USERS]; for (int i = 0; i < COUNT_OF_USERS; i++) { users[i] = new UserImpl("owner" + i, "owner" + i + "@eclipse.org", "owner" + i, "password", emptyList()); } pairs = new SshPairImpl[COUNT_OF_PAIRS]; for (int i = 0; i < COUNT_OF_PAIRS; i++) { pairs[i] = new SshPairImpl("owner" + i / 3, // 3 each pairs share the same owner "service" + i / 2, // each 2 pairs share the same service "name" + i, NameGenerator.generate("publicKey-", 20), NameGenerator.generate("privateKey-", 20)); } userRepository.createAll(Arrays.asList(users)); sshRepository.createAll(Arrays.asList(pairs)); } @AfterMethod public void cleanUp() throws TckRepositoryException { sshRepository.removeAll(); userRepository.removeAll(); } @Test(dependsOnMethods = "shouldGetSshPairByNameOwnerAndService") public void shouldCreateSshKeyPair() throws Exception { SshPairImpl pair = new SshPairImpl("owner1", "service", "name", "publicKey", "privateKey"); sshDao.create(pair); assertEquals(sshDao.get("owner1", "service", "name"), pair); } @Test(expectedExceptions = ConflictException.class) public void shouldThrowConflictExceptionWhenSshPairWithSuchOwnerAndServiceAndNameAlreadyExists() throws Exception { sshDao.create(pairs[0]); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnCreateIfSshPairIsNull() throws Exception { sshDao.create(null); } @Test public void shouldGetSshPairByNameOwnerAndService() throws Exception { SshPairImpl sshPair = pairs[0]; sshDao.get(sshPair.getOwner(), sshPair.getService(), sshPair.getName()); } @Test(expectedExceptions = NotFoundException.class) public void shouldThrowNotFoundExceptionIfPairWithSuchNameOwnerAndServiceDoesNotExist() throws Exception { SshPairImpl sshPair = pairs[0]; sshDao.get(sshPair.getService(), sshPair.getService(), sshPair.getName()); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnGetSshPairWhenOwnerIsNull() throws Exception { sshDao.get(null, "service", "name"); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnGetSshPairWhenServiceIsNull() throws Exception { sshDao.get("owner", null, "name"); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnGetSshPairWhenNameIsNull() throws Exception { sshDao.get("owner", "service", null); } @Test public void shouldGetSshPairListByNameAndService() throws Exception { SshPairImpl sshPair1 = pairs[0]; SshPairImpl sshPair2 = pairs[1]; assertEquals(sshPair1.getOwner(), sshPair2.getOwner(), "Owner must be the same"); assertEquals(sshPair1.getService(), sshPair2.getService(), "Service must be the same"); final List<SshPairImpl> found = sshDao.get(sshPair1.getOwner(), sshPair1.getService()); assertEquals(new HashSet<>(found), new HashSet<>(asList(sshPair1, sshPair2))); } @Test public void shouldReturnEmptyListWhenThereAreNoPairsWithGivenOwnerAndService() throws Exception { assertTrue(sshDao.get("non-existing-owner", "non-existing-service").isEmpty()); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnGetSshPairsListWhenOwnerIsNull() throws Exception { sshDao.get(null, "service"); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnGetSshPairsListWhenServiceIsNull() throws Exception { sshDao.get("owner", null); } @Test(expectedExceptions = NotFoundException.class, dependsOnMethods = "shouldThrowNotFoundExceptionIfPairWithSuchNameOwnerAndServiceDoesNotExist") public void shouldRemoveSshKeyPair() throws Exception { final SshPairImpl pair = pairs[4]; try { sshDao.remove(pair.getOwner(), pair.getService(), pair.getName()); } catch (NotFoundException x) { fail("SshKeyPair should be removed"); } sshDao.get(pair.getOwner(), pair.getService(), pair.getName()); } @Test public void shouldGetSshPairByOwner() throws Exception { final List<SshPairImpl> sshPairs = sshDao.get(pairs[0].getOwner()); assertEquals(new HashSet<>(sshPairs), new HashSet<>(asList(pairs[0], pairs[1], pairs[2]))); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeWhenGettingByNullOwner() throws Exception { sshDao.get(null); } @Test(expectedExceptions = NotFoundException.class) public void shouldThrowNotFoundExceptionWhenRemovingNonExistingPair() throws Exception { sshDao.remove(pairs[4].getService(), pairs[4].getService(), pairs[4].getService()); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnRemoveWhenOwnerIsNull() throws Exception { sshDao.remove(null, "service", "name"); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnRemoveWhenServiceIsNull() throws Exception { sshDao.remove("owner", null, "name"); } @Test(expectedExceptions = NullPointerException.class) public void shouldThrowNpeOnRemoveWhenNameIsNull() throws Exception { sshDao.remove("owner", "service", null); } }