You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DefaultUserRepositoriesTest.java 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package org.apache.maven.archiva.security;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import java.io.File;
  21. import java.util.List;
  22. import org.apache.commons.io.FileUtils;
  23. import org.apache.commons.lang.StringUtils;
  24. import org.apache.maven.archiva.configuration.ArchivaConfiguration;
  25. import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
  26. import org.codehaus.plexus.PlexusTestCase;
  27. import org.codehaus.plexus.redback.rbac.RBACManager;
  28. import org.codehaus.plexus.redback.role.RoleManager;
  29. import org.codehaus.plexus.redback.system.SecuritySystem;
  30. import org.codehaus.plexus.redback.users.User;
  31. import org.codehaus.plexus.redback.users.UserManager;
  32. /**
  33. * DefaultUserRepositoriesTest
  34. *
  35. * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  36. * @version $Id$
  37. */
  38. public class DefaultUserRepositoriesTest
  39. extends PlexusTestCase
  40. {
  41. private static final String USER_GUEST = "guest";
  42. private static final String USER_ADMIN = "admin";
  43. private static final String USER_ALPACA = "alpaca";
  44. private SecuritySystem securitySystem;
  45. private RBACManager rbacManager;
  46. private RoleManager roleManager;
  47. private ArchivaConfiguration archivaConfiguration;
  48. private UserRepositories userRepos;
  49. public void testGetObservableRepositoryIds()
  50. throws Exception
  51. {
  52. // create some users.
  53. createUser( USER_ALPACA, "Al 'Archiva' Paca" );
  54. assertEquals( "Expected users", 3, securitySystem.getUserManager().getUsers().size() );
  55. // some unassigned repo observer roles.
  56. setupRepository( "central" );
  57. setupRepository( "corporate" );
  58. setupRepository( "internal" );
  59. setupRepository( "snapshots" );
  60. setupRepository( "secret" );
  61. // some assigned repo observer roles.
  62. assignRepositoryObserverRole( USER_ALPACA, "corporate" );
  63. assignRepositoryObserverRole( USER_ALPACA, "central" );
  64. assignRepositoryObserverRole( USER_GUEST, "corporate" );
  65. // the global repo observer role.
  66. assignGlobalRepositoryObserverRole( USER_ADMIN );
  67. assertRepoIds( new String[] { "central", "corporate" }, userRepos.getObservableRepositoryIds( USER_ALPACA ) );
  68. assertRepoIds( new String[] { "coporate" }, userRepos.getObservableRepositoryIds( USER_GUEST ) );
  69. assertRepoIds( new String[] { "central", "internal", "corporate", "snapshots", "secret" }, userRepos
  70. .getObservableRepositoryIds( USER_ADMIN ) );
  71. }
  72. private void assertRepoIds( String[] expectedRepoIds, List<String> observableRepositoryIds )
  73. {
  74. assertNotNull( "Observable Repository Ids cannot be null.", observableRepositoryIds );
  75. if ( expectedRepoIds.length != observableRepositoryIds.size() )
  76. {
  77. fail( "Size of Observable Repository Ids wrong, expected <" + expectedRepoIds.length + "> but got <"
  78. + observableRepositoryIds.size() + "> instead. \nExpected: [" + StringUtils.join( expectedRepoIds, "," )
  79. + "]\nActual: [" + StringUtils.join( observableRepositoryIds.iterator(), "," ) + "]" );
  80. }
  81. }
  82. private void setupRepository( String repoId )
  83. throws Exception
  84. {
  85. // Add repo to configuration.
  86. ManagedRepositoryConfiguration repoConfig = new ManagedRepositoryConfiguration();
  87. repoConfig.setId( repoId );
  88. repoConfig.setName( "Testable repo <" + repoId + ">" );
  89. repoConfig.setLocation( getTestPath( "target/test-repo/" + repoId ) );
  90. archivaConfiguration.getConfiguration().addManagedRepository( repoConfig );
  91. // Add repo roles to security.
  92. userRepos.createMissingRepositoryRoles( repoId );
  93. }
  94. private void assignGlobalRepositoryObserverRole( String principal )
  95. throws Exception
  96. {
  97. roleManager.assignRole( ArchivaRoleConstants.TEMPLATE_GLOBAL_REPOSITORY_OBSERVER, principal );
  98. }
  99. private void assignRepositoryObserverRole( String principal, String repoId )
  100. throws Exception
  101. {
  102. roleManager.assignTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId, principal );
  103. }
  104. private User createUser( String principal, String fullname )
  105. {
  106. UserManager userManager = securitySystem.getUserManager();
  107. User user = userManager.createUser( principal, fullname, principal + "@testable.archiva.apache.org" );
  108. securitySystem.getPolicy().setEnabled( false );
  109. userManager.addUser( user );
  110. securitySystem.getPolicy().setEnabled( true );
  111. return user;
  112. }
  113. @Override
  114. protected void setUp()
  115. throws Exception
  116. {
  117. super.setUp();
  118. File srcConfig = getTestFile( "src/test/resources/repository-archiva.xml" );
  119. File destConfig = getTestFile( "target/test-conf/archiva.xml" );
  120. destConfig.getParentFile().mkdirs();
  121. destConfig.delete();
  122. FileUtils.copyFile( srcConfig, destConfig );
  123. securitySystem = (SecuritySystem) lookup( SecuritySystem.class, "testable" );
  124. rbacManager = (RBACManager) lookup( RBACManager.class, "memory" );
  125. roleManager = (RoleManager) lookup( RoleManager.class, "default" );
  126. userRepos = (UserRepositories) lookup( UserRepositories.class, "default" );
  127. archivaConfiguration = (ArchivaConfiguration) lookup( ArchivaConfiguration.class );
  128. // Some basic asserts.
  129. assertNotNull( securitySystem );
  130. assertNotNull( rbacManager );
  131. assertNotNull( roleManager );
  132. assertNotNull( userRepos );
  133. assertNotNull( archivaConfiguration );
  134. // Setup Admin User.
  135. User adminUser = createUser( USER_ADMIN, "Admin User" );
  136. roleManager.assignRole( ArchivaRoleConstants.TEMPLATE_SYSTEM_ADMIN, adminUser.getPrincipal().toString() );
  137. // Setup Guest User.
  138. User guestUser = createUser( USER_GUEST, "Guest User" );
  139. roleManager.assignRole( ArchivaRoleConstants.TEMPLATE_GUEST, guestUser.getPrincipal().toString() );
  140. }
  141. }