/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* See LICENSE.txt included in this distribution for the specific
* language governing permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at LICENSE.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
*/
package org.opensolaris.opengrok.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.junit.Assert;
import org.junit.Test;
import org.opensolaris.opengrok.configuration.Group;
import org.opensolaris.opengrok.configuration.Project;
import org.opensolaris.opengrok.configuration.RuntimeEnvironment;
import org.opensolaris.opengrok.history.RepoRepository;
import org.opensolaris.opengrok.history.RepositoryInfo;
public class ProjectHelperTest extends ProjectHelperTestBase {
/**
* Test of getInstance method, of class ProjectHelper.
*/
@Test
public void testGetInstance() {
ProjectHelper result = ProjectHelper.getInstance(cfg);
Assert.assertNotNull("Project helper should not be null", result);
Assert.assertSame(result.getClass(), ProjectHelper.class);
}
/**
* Test if projects and groups are always reloaded fully from the env.
*
* This ensures that when the RuntimeEnvironment changes that it also
* updates the projects in the ui.
*/
@Test
public void testSynchronization() {
HashMap<String,Project> oldProjects = new HashMap<>(env.getProjects());
List<RepositoryInfo> oldRepositories = new ArrayList<>(env.getRepositories());
Set<Group> oldGroups = new TreeSet<>(env.getGroups());
Map<Project, List<RepositoryInfo>> oldMap = new TreeMap<>(getRepositoriesMap());
invokeRemoveAll();
cfg = PageConfig.get(getRequest());
helper = cfg.getProjectHelper();
// basic setup
Assert.assertEquals("There should be 40 env projects", 40, env.getProjects().size());
Assert.assertEquals("There should be 20 env repositories", 20, env.getRepositories().size());
Assert.assertEquals("There should be 4 env groups", 4, env.getGroups().size());
Assert.assertEquals("There are 8 ungrouped projects", 8, helper.getAllUngrouped().size());
Assert.assertEquals("There are 40 projects", 40, helper.getAllProjects().size());
Assert.assertEquals("There are 4 projects", 4, helper.getRepositories().size());
Assert.assertEquals("There are 4 groups", 4, helper.getGroups().size());
// project
Project p = new Project("some random name not in any group");
// group
Group g = new Group();
g.setName("some random name of a group");
// repository
Project repo = new Project("some random name not in any other group");
RepositoryInfo info = new RepoRepository();
info.setParent(repo.getName());
info.setDirectoryName(null);
List<RepositoryInfo> infos = getRepositoriesMap().get(repo);
if (infos == null) {
infos = new ArrayList<>();
}
infos.add(info);
getRepositoriesMap().put(repo, infos);
env.getRepositories().add(info);
env.getProjects().put("foo", p);
env.getProjects().put("bar", repo);
env.getGroups().add(g);
env.register();
Assert.assertEquals(42, env.getProjects().size());
Assert.assertEquals(21, env.getRepositories().size());
Assert.assertEquals(5, env.getGroups().size());
// simulate another request
cfg = PageConfig.get(getRequest());
helper = cfg.getProjectHelper();
// check for updates
Assert.assertEquals("The helper state should refresh", 10, helper.getAllUngrouped().size());
Assert.assertEquals("The helper state should refresh", 42, helper.getAllProjects().size());
Assert.assertEquals("The helper state should refresh", 5, helper.getRepositories().size());
Assert.assertEquals("The helper state should refresh", 5, helper.getGroups().size());
setRepositoriesMap(oldMap);
env.setProjects(oldProjects);
env.setRepositories(oldRepositories);
env.setGroups(oldGroups);
env.register();
}
/**
* Test of getRepositoryInfo method, of class ProjectHelper.
*/
@Test
public void testUnAllowedGetRepositoryInfo() {
Project p = new Project("repository_2_1");
List<RepositoryInfo> result = helper.getRepositoryInfo(p);
Assert.assertEquals("this project is not allowed", 0, result.size());
}
/**
* Test of getRepositoryInfo method, of class ProjectHelper.
*/
@Test
public void testAllowedGetRepositoryInfo() {
Project p = new Project("allowed_grouped_repository_0_1");
List<RepositoryInfo> result = helper.getRepositoryInfo(p);
Assert.assertEquals(1, result.size());
Assert.assertEquals("allowed_grouped_repository_0_1_" + 0, result.get(0).getParent());
}
/**
* Test of getGroups method, of class ProjectHelper.
*/
@Test
public void testGetAllowedGroups() {
Set<Group> result = helper.getGroups();
Assert.assertEquals(2, result.size());
for (Group g : result) {
Assert.assertTrue(g.getName().startsWith("allowed_"));
}
}
/**
* Test of getProjects method, of class ProjectHelper.
*/
@Test
public void testGetAllowedProjects() {
Set<Project> result = helper.getProjects();
Assert.assertEquals(2, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getRepositories method, of class ProjectHelper.
*/
@Test
public void testGetRepositories() {
Set<Project> result = helper.getRepositories();
Assert.assertEquals(2, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getProjects method, of class ProjectHelper.
*/
@Test
public void testGetProjectsAllowedGroup() {
for (Group g : RuntimeEnvironment.getInstance().getGroups()) {
if (g.getName().startsWith("allowed_group_0")) {
Set<Project> result = helper.getProjects(g);
Assert.assertEquals(2, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
}
}
/**
* Test of getProjects method, of class ProjectHelper.
*/
@Test
public void testGetProjectsUnAllowedGroup() {
for (Group g : RuntimeEnvironment.getInstance().getGroups()) {
if (g.getName().startsWith("group_0")) {
Assert.assertEquals(0, helper.getProjects(g).size());
break;
}
}
}
/**
* Test of getRepositories method, of class ProjectHelper.
*/
@Test
public void testGetRepositoriesAllowedGroup() {
for (Group g : RuntimeEnvironment.getInstance().getGroups()) {
if (g.getName().startsWith("allowed_group_0")) {
Set<Project> result = helper.getRepositories(g);
Assert.assertEquals(2, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
}
}
/**
* Test of getRepositories method, of class ProjectHelper.
*/
@Test
public void testGetRepositoriesUnAllowedGroup() {
for (Group g : RuntimeEnvironment.getInstance().getGroups()) {
if (g.getName().startsWith("group_0")) {
Assert.assertEquals(0, helper.getRepositories(g).size());
break;
}
}
}
/**
* Test of getGroupedProjects method, of class ProjectHelper.
*/
@Test
public void testGetGroupedProjects() {
Set<Project> result = helper.getGroupedProjects();
Assert.assertEquals(4, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getGroupedRepositories method, of class ProjectHelper.
*/
@Test
public void testGetGroupedRepositories() {
Set<Project> result = helper.getGroupedRepositories();
Assert.assertEquals(4, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getUngroupedProjects method, of class ProjectHelper.
*/
@Test
public void testGetUngroupedProjects() {
Set<Project> result = helper.getUngroupedProjects();
Assert.assertEquals(2, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getUngroupedRepositories method, of class ProjectHelper.
*/
@Test
public void testGetUngroupedRepositories() {
Set<Project> result = helper.getUngroupedRepositories();
Assert.assertEquals(2, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getAllGrouped method, of class ProjectHelper.
*/
@Test
public void testGetAllGrouped() {
Set<Project> result = helper.getAllGrouped();
Assert.assertEquals(8, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getAllGrouped method, of class ProjectHelper.
*/
@Test
public void testGetAllGroupedAllowedGroup() {
for (Group g : RuntimeEnvironment.getInstance().getGroups()) {
if (g.getName().startsWith("allowed_group_0")) {
Set<Project> result = helper.getAllGrouped(g);
Assert.assertEquals(4, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
}
}
@Test
public void testGetAllGroupedUnAllowedGroup() {
for (Group g : RuntimeEnvironment.getInstance().getGroups()) {
if (g.getName().startsWith("group_0")) {
Assert.assertEquals(0, helper.getAllGrouped(g).size());
break;
}
}
}
/**
* Test of getAllUngrouped method, of class ProjectHelper.
*/
@Test
public void testGetAllUngrouped() {
Set<Project> result = helper.getAllUngrouped();
Assert.assertEquals(4, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
/**
* Test of getAllProjects method, of class ProjectHelper.
*/
@Test
public void testGetAllProjects() {
Set<Project> result = helper.getAllProjects();
Assert.assertEquals(12, result.size());
for (Project p : result) {
Assert.assertTrue(p.getName().startsWith("allowed_"));
}
}
}