org.eclipse.hudson.security.team.TeamJobACLTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.hudson.security.team.TeamJobACLTest.java

Source

/*
 * 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.model.FreeStyleProject;
import hudson.model.FreeStyleProjectMock;
import hudson.model.Item;
import hudson.security.ACL;
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 org.junit.Before;
import org.junit.Test;
import org.springframework.security.acls.sid.PrincipalSid;
import org.springframework.security.acls.sid.Sid;

/**
 * Test class for TeamBasedACL
 *
 * @author Winston Prakash
 */
public class TeamJobACLTest {

    private Permission configurePermission = Item.CONFIGURE;
    private Permission readPermission = Item.READ;
    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
    public void testJobPermission()
            throws IOException, TeamManager.TeamAlreadyExistsException, TeamNotFoundException {
        String teamName = "team1";
        Team team = teamManager.createTeam(teamName);
        FreeStyleProject freeStyleJob = new FreeStyleProjectMock("testJob");

        TeamMember newMember = new TeamMember();
        newMember.setName("Paul");
        newMember.addPermission(Item.CONFIGURE);
        team.addMember(newMember);

        teamManager.addJobToUserTeam("Paul", freeStyleJob.getName());

        Sid sid = new PrincipalSid("Paul");
        TeamBasedACL teamBasedACL = new TeamBasedACL(teamManager, TeamBasedACL.SCOPE.JOB, freeStyleJob);
        Assert.assertTrue("Paul is a team member with Job CONFIGURE permission",
                teamBasedACL.hasPermission(sid, configurePermission).booleanValue());

        Sid sid2 = new PrincipalSid("Chris");
        Assert.assertNull("Chris is not a team member and should not have Job CONFIGURE permission",
                teamBasedACL.hasPermission(sid2, configurePermission));
        Assert.assertNull("Chris is not a team member and should not have Job READ permission",
                teamBasedACL.hasPermission(sid2, readPermission));

    }

    @Test
    public void testPublicJobPermission() throws IOException {
        FreeStyleProject freeStyleJob = new FreeStyleProjectMock("testJob");

        teamManager.getPublicTeam().addJob(new TeamJob(freeStyleJob.getName()));

        Sid sid = new PrincipalSid("Paul");
        TeamBasedACL teamBasedACL = new TeamBasedACL(teamManager, TeamBasedACL.SCOPE.JOB, freeStyleJob);
        Assert.assertNull("Paul is not a SysAdmin and should not have public Job CONFIGURE permission",
                teamBasedACL.hasPermission(sid, configurePermission));
        Assert.assertTrue("Paul should have pubic Job READ permission",
                teamBasedACL.hasPermission(sid, readPermission).booleanValue());

        teamManager.addSysAdmin("Paul");
        Assert.assertTrue("Paul is a SysAdmin and should have public Job CONFIGURE permission",
                teamBasedACL.hasPermission(sid, configurePermission).booleanValue());
    }

    @Test
    public void testAnonymousPublicJobPermission() throws IOException {
        FreeStyleProject freeStyleJob = new FreeStyleProjectMock("testJob");

        teamManager.getPublicTeam().addJob(new TeamJob(freeStyleJob.getName()));

        Sid sid = ACL.ANONYMOUS;
        TeamBasedACL teamBasedACL = new TeamBasedACL(teamManager, TeamBasedACL.SCOPE.JOB, freeStyleJob);
        Assert.assertNull("Anonymous should not have public Job CONFIGURE permission",
                teamBasedACL.hasPermission(sid, configurePermission));
        Assert.assertTrue("Anonymous should have public Job READ permission",
                teamBasedACL.hasPermission(sid, readPermission).booleanValue());

    }

    @Test
    public void testEveryonePublicJobPermission() throws IOException {
        FreeStyleProject freeStyleJob = new FreeStyleProjectMock("testJob");

        teamManager.getPublicTeam().addJob(new TeamJob(freeStyleJob.getName()));
        Sid sid = ACL.EVERYONE;
        TeamBasedACL teamBasedACL = new TeamBasedACL(teamManager, TeamBasedACL.SCOPE.JOB, freeStyleJob);
        Assert.assertNull("Every one should not have public Job CONFIGURE permission",
                teamBasedACL.hasPermission(sid, configurePermission));
        Assert.assertTrue("Every one should have piublic Job READ permission",
                teamBasedACL.hasPermission(sid, readPermission).booleanValue());

    }

    @Test
    public void testJobVisibility() throws IOException, TeamManager.TeamAlreadyExistsException {
        String teamName = "team1";
        Team team = teamManager.createTeam(teamName);
        FreeStyleProject freeStyleJob = new FreeStyleProjectMock("testJob");
        TeamJob teamJob = new TeamJob(freeStyleJob.getName());
        teamJob.addVisibility("public");
        team.addJob(teamJob);

        Sid sid = ACL.ANONYMOUS;
        TeamBasedACL teamBasedACL = new TeamBasedACL(teamManager, TeamBasedACL.SCOPE.JOB, freeStyleJob);
        Assert.assertTrue("Anonymous should have testJob READ permission",
                teamBasedACL.hasPermission(sid, readPermission).booleanValue());

        teamJob.removeVisibility("public");
        Assert.assertNull("Anonymous should not have testJob READ permission",
                teamBasedACL.hasPermission(sid, readPermission));

        String teamName2 = "team2";
        Team team2 = teamManager.createTeam(teamName2);
        TeamMember newMember = new TeamMember();
        newMember.setName("Chris");
        newMember.addPermission(Item.CONFIGURE);
        team2.addMember(newMember);

        teamJob.addVisibility(team2.getName());

        Sid sid2 = new PrincipalSid("Chris");
        Assert.assertNull("Chris should not have Job CONFIGURE permission",
                teamBasedACL.hasPermission(sid2, configurePermission));
        Assert.assertTrue("Chris should have testJob READ permission",
                teamBasedACL.hasPermission(sid2, readPermission).booleanValue());

    }
}