/*
* Copyright (c) 2013 Oracle Corporation.
* 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:
* Winston Prakash
*/
package org.eclipse.hudson.security.team;
import hudson.security.Permission;
import java.io.File;
import java.io.IOException;
import junit.framework.Assert;
import org.apache.commons.io.FileUtils;
import org.eclipse.hudson.security.team.TeamManager.TeamNotFoundException;
import org.junit.After;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
/**
* Test class for TeamManager
*
* @author Winston Prakash
*/
public class TeamManagerTest {
private File homeDir = FileUtils.getTempDirectory();
private File teamsFolder = new File(homeDir, "teams");
private final String teamsConfigFileName = "teams.xml";
private File teamsStore = new File(teamsFolder, teamsConfigFileName);
private TeamManager teamManager;
@Before
public void setUp() {
if (teamsStore.exists()) {
teamsStore.delete();
}
teamManager = new TeamManager(homeDir);
teamManager.setUseBulkSaveFlag(false);
}
@After
public void tearDown() {
if (teamsStore.exists()) {
teamsStore.delete();
}
}
/**
* Test of createTeam method, of class TeamManager.
*/
@Test
public void testCreateTeam() throws IOException, TeamManager.TeamAlreadyExistsException {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
}
/**
* Test of removeTeam method, of class TeamManager.
*/
@Test
public void testRemoveTeam() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
teamManager.removeTeam(teamName);
teamManager = new TeamManager(homeDir);
try {
teamManager.findTeam(teamName);
fail("Team must not exist");
} catch (TeamNotFoundException ex) {
// Correct. There should not be a team
}
}
/**
* Test of findUserTeam method, of class TeamManager.
*/
@Test
public void testFindUserTeam() throws IOException, TeamManager.TeamAlreadyExistsException {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
Team team = teamManager.findUserTeams("chris").get(0);
Assert.assertTrue(teamName.equals(team.getName()));
}
/**
* Test of addJobToUserTeam method, of class TeamManager.
*/
@Test
public void testAddJobToUserTeam() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
teamManager.addJobToUserTeam("chris", "job1");
Team team = teamManager.findTeam(teamName);
Assert.assertTrue(team.isJobOwner("job1"));
}
/**
* Test of findJobOwnerTeam method, of class TeamManager.
*/
@Test
public void testFindJobOwnerTeam() throws IOException, TeamManager.TeamAlreadyExistsException, TeamNotFoundException {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
teamManager.addJobToUserTeam("chris", "job1");
Team team = teamManager.findJobOwnerTeam("job1");
Assert.assertTrue(teamName.equals(team.getName()));
}
/**
* Test of addJob method, of class TeamManager.
*/
@Test
public void testAddJob() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
Team team = teamManager.findTeam(teamName);
teamManager.addJob(team, "job1");
Team jobTeam = teamManager.findJobOwnerTeam("job1");
Assert.assertTrue(teamName.equals(jobTeam.getName()));
}
/**
* Test of removeJob method, of class TeamManager.
*/
@Test
public void testRemoveJob() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
teamManager.addJobToUserTeam("chris", "job1");
Team team = teamManager.findTeam(teamName);
teamManager.removeJob(team, teamName);
Assert.assertFalse(team.isJobOwner(teamName));
}
/**
* Test of removeJobFromUserTeam method, of class TeamManager.
*/
@Test
public void testRemoveJobFromUserTeam() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
Team team = teamManager.findTeam(teamName);
teamManager.addJob(team, "job1");
teamManager.removeJobFromUserTeam("paul", "job1");
Assert.assertFalse(team.isJobOwner("job1"));
}
/**
* Test of renameJobInUserTeam method, of class TeamManager.
*/
@Test
public void testRenameJobInUserTeam() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
Team team = teamManager.findTeam(teamName);
team.addJob(new TeamJob("job1"));
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
teamManager.renameJobInUserTeam("paul", "job1", "job2");
Team team = teamManager.findTeam(teamName);
Assert.assertFalse(" team1 must not be a owner of job1", team.isJobOwner("job1"));
Assert.assertTrue(" team1 must be a job owner of job2", team.isJobOwner("job2"));
}
/**
* Test of renameJob method, of class TeamManager.
*/
@Test
public void testRenameJob() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
Team team = teamManager.findTeam(teamName);
team.addJob(new TeamJob("job1"));
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
Team team = teamManager.findTeam(teamName);
teamManager.renameJob(team, "job1", "job2");
Team jobTeam = teamManager.findJobOwnerTeam("job2");
Assert.assertFalse(team.isJobOwner("job1"));
Assert.assertTrue(teamName.equals(jobTeam.getName()));
}
/**
* Test of save method, of class TeamManager.
*/
@Test
public void testSave() throws Exception {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
// Save is called automatically
Assert.assertTrue(teamsStore.exists());
// This re-reads from persistence
teamManager = new TeamManager(homeDir);
try {
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
}
/**
* Test of load method, of class TeamManager.
*/
@Test
public void testLoad() throws IOException, TeamManager.TeamAlreadyExistsException {
String teamName = "team1";
teamManager.createTeam(teamName);
try {
teamManager.addUser(teamName, "chris");
teamManager.addUser(teamName, "paul");
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
// Save is called automatically
Assert.assertTrue(teamsStore.exists());
// This re-reads from persistence
teamManager = new TeamManager(homeDir);
// load() must be called automatically
try {
teamManager.findTeam(teamName);
} catch (TeamNotFoundException ex) {
fail("Team must exist");
}
}
@Test
public void testTeamPersistence() throws IOException, TeamManager.TeamAlreadyExistsException, TeamNotFoundException {
teamManager.setUseBulkSaveFlag(false);
teamManager.addSysAdmin("admin1");
teamManager.addSysAdmin("Paul");
Team team = teamManager.createTeam("Team1", "Team1 Description", null);
TeamMember member = new TeamMember();
member.setName("member1");
member.setAsTeamAdmin(true);
member.addPermission(Permission.DELETE);
team.addMember(member);
team.addJob(new TeamJob("job1"));
team.addView(new TeamView("view1"));
team.addNode(new TeamNode("node1"));
teamManager = new TeamManager(homeDir);
teamManager.setUseBulkSaveFlag(false);
if (!teamManager.isSysAdmin("admin1")) {
fail("SysAdmin admin1 must exists");
}
team = teamManager.findTeam("Team1");
if (team == null) {
fail("The team Team1 must exists");
} else {
if (!"Team1 Description".equals(team.getDescription())) {
fail("The team Team1 must have description 'Team1 Description' ");
}
if (!team.isJobOwner("job1")) {
fail("The team Team1 must b ethe owner of job1");
}
if (!team.isViewOwner("view1")) {
fail("The team Team1 must be the owner of view1");
}
if (!team.isNodeOwner("node1")) {
fail("The team Team1 must be the owner of node1");
}
member = team.findMember("member1");
if (member == null) {
fail("The member member1 must exists in Team1 ");
} else {
if (!member.canDelete()) {
fail("The member member1 must have the permission delete");
}
}
}
}
}