To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / .svn / pristine / 0b / 0b7befce1d7322f245834ffc9480adf8d5c60890.svn-base @ 1298:4f746d8966dd
History | View | Annotate | Download (9.72 KB)
| 1 | 1295:622f24f53b42 | Chris | # Redmine - project management software |
|---|---|---|---|
| 2 | # Copyright (C) 2006-2013 Jean-Philippe Lang |
||
| 3 | # |
||
| 4 | # This program is free software; you can redistribute it and/or |
||
| 5 | # modify it under the terms of the GNU General Public License |
||
| 6 | # as published by the Free Software Foundation; either version 2 |
||
| 7 | # of the License, or (at your option) any later version. |
||
| 8 | # |
||
| 9 | # This program is distributed in the hope that it will be useful, |
||
| 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
| 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
| 12 | # GNU General Public License for more details. |
||
| 13 | # |
||
| 14 | # You should have received a copy of the GNU General Public License |
||
| 15 | # along with this program; if not, write to the Free Software |
||
| 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||
| 17 | |||
| 18 | require File.expand_path('../test_case', __FILE__)
|
||
| 19 | require 'tmpdir' |
||
| 20 | |||
| 21 | class RedminePmTest::RepositorySubversionTest < RedminePmTest::TestCase |
||
| 22 | fixtures :projects, :users, :members, :roles, :member_roles, :auth_sources |
||
| 23 | |||
| 24 | SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn" |
||
| 25 | |||
| 26 | def test_anonymous_read_on_public_repo_with_permission_should_succeed |
||
| 27 | assert_success "ls", svn_url |
||
| 28 | end |
||
| 29 | |||
| 30 | def test_anonymous_read_on_public_repo_without_permission_should_fail |
||
| 31 | Role.anonymous.remove_permission! :browse_repository |
||
| 32 | assert_failure "ls", svn_url |
||
| 33 | end |
||
| 34 | |||
| 35 | def test_anonymous_read_on_private_repo_should_fail |
||
| 36 | Project.find(1).update_attribute :is_public, false |
||
| 37 | assert_failure "ls", svn_url |
||
| 38 | end |
||
| 39 | |||
| 40 | def test_anonymous_commit_on_public_repo_should_fail |
||
| 41 | Role.anonymous.add_permission! :commit_access |
||
| 42 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 43 | end |
||
| 44 | |||
| 45 | def test_anonymous_commit_on_private_repo_should_fail |
||
| 46 | Role.anonymous.add_permission! :commit_access |
||
| 47 | Project.find(1).update_attribute :is_public, false |
||
| 48 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 49 | end |
||
| 50 | |||
| 51 | def test_non_member_read_on_public_repo_with_permission_should_succeed |
||
| 52 | Role.anonymous.remove_permission! :browse_repository |
||
| 53 | with_credentials "miscuser8", "foo" do |
||
| 54 | assert_success "ls", svn_url |
||
| 55 | end |
||
| 56 | end |
||
| 57 | |||
| 58 | def test_non_member_read_on_public_repo_without_permission_should_fail |
||
| 59 | Role.anonymous.remove_permission! :browse_repository |
||
| 60 | Role.non_member.remove_permission! :browse_repository |
||
| 61 | with_credentials "miscuser8", "foo" do |
||
| 62 | assert_failure "ls", svn_url |
||
| 63 | end |
||
| 64 | end |
||
| 65 | |||
| 66 | def test_non_member_read_on_private_repo_should_fail |
||
| 67 | Project.find(1).update_attribute :is_public, false |
||
| 68 | with_credentials "miscuser8", "foo" do |
||
| 69 | assert_failure "ls", svn_url |
||
| 70 | end |
||
| 71 | end |
||
| 72 | |||
| 73 | def test_non_member_commit_on_public_repo_should_fail |
||
| 74 | Role.non_member.add_permission! :commit_access |
||
| 75 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 76 | end |
||
| 77 | |||
| 78 | def test_non_member_commit_on_private_repo_should_fail |
||
| 79 | Role.non_member.add_permission! :commit_access |
||
| 80 | Project.find(1).update_attribute :is_public, false |
||
| 81 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 82 | end |
||
| 83 | |||
| 84 | def test_member_read_on_public_repo_with_permission_should_succeed |
||
| 85 | Role.anonymous.remove_permission! :browse_repository |
||
| 86 | Role.non_member.remove_permission! :browse_repository |
||
| 87 | with_credentials "dlopper", "foo" do |
||
| 88 | assert_success "ls", svn_url |
||
| 89 | end |
||
| 90 | end |
||
| 91 | |||
| 92 | def test_member_read_on_public_repo_without_permission_should_fail |
||
| 93 | Role.anonymous.remove_permission! :browse_repository |
||
| 94 | Role.non_member.remove_permission! :browse_repository |
||
| 95 | Role.find(2).remove_permission! :browse_repository |
||
| 96 | with_credentials "dlopper", "foo" do |
||
| 97 | assert_failure "ls", svn_url |
||
| 98 | end |
||
| 99 | end |
||
| 100 | |||
| 101 | def test_member_read_on_private_repo_with_permission_should_succeed |
||
| 102 | Project.find(1).update_attribute :is_public, false |
||
| 103 | with_credentials "dlopper", "foo" do |
||
| 104 | assert_success "ls", svn_url |
||
| 105 | end |
||
| 106 | end |
||
| 107 | |||
| 108 | def test_member_read_on_private_repo_without_permission_should_fail |
||
| 109 | Role.find(2).remove_permission! :browse_repository |
||
| 110 | Project.find(1).update_attribute :is_public, false |
||
| 111 | with_credentials "dlopper", "foo" do |
||
| 112 | assert_failure "ls", svn_url |
||
| 113 | end |
||
| 114 | end |
||
| 115 | |||
| 116 | def test_member_commit_on_public_repo_with_permission_should_succeed |
||
| 117 | Role.find(2).add_permission! :commit_access |
||
| 118 | with_credentials "dlopper", "foo" do |
||
| 119 | assert_success "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 120 | end |
||
| 121 | end |
||
| 122 | |||
| 123 | def test_member_commit_on_public_repo_without_permission_should_fail |
||
| 124 | Role.find(2).remove_permission! :commit_access |
||
| 125 | with_credentials "dlopper", "foo" do |
||
| 126 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 127 | end |
||
| 128 | end |
||
| 129 | |||
| 130 | def test_member_commit_on_private_repo_with_permission_should_succeed |
||
| 131 | Role.find(2).add_permission! :commit_access |
||
| 132 | Project.find(1).update_attribute :is_public, false |
||
| 133 | with_credentials "dlopper", "foo" do |
||
| 134 | assert_success "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 135 | end |
||
| 136 | end |
||
| 137 | |||
| 138 | def test_member_commit_on_private_repo_without_permission_should_fail |
||
| 139 | Role.find(2).remove_permission! :commit_access |
||
| 140 | Project.find(1).update_attribute :is_public, false |
||
| 141 | with_credentials "dlopper", "foo" do |
||
| 142 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 143 | end |
||
| 144 | end |
||
| 145 | |||
| 146 | def test_invalid_credentials_should_fail |
||
| 147 | Project.find(1).update_attribute :is_public, false |
||
| 148 | with_credentials "dlopper", "foo" do |
||
| 149 | assert_success "ls", svn_url |
||
| 150 | end |
||
| 151 | with_credentials "dlopper", "wrong" do |
||
| 152 | assert_failure "ls", svn_url |
||
| 153 | end |
||
| 154 | end |
||
| 155 | |||
| 156 | def test_anonymous_read_should_fail_with_login_required |
||
| 157 | assert_success "ls", svn_url |
||
| 158 | with_settings :login_required => '1' do |
||
| 159 | assert_failure "ls", svn_url |
||
| 160 | end |
||
| 161 | end |
||
| 162 | |||
| 163 | def test_authenticated_read_should_succeed_with_login_required |
||
| 164 | with_settings :login_required => '1' do |
||
| 165 | with_credentials "miscuser8", "foo" do |
||
| 166 | assert_success "ls", svn_url |
||
| 167 | end |
||
| 168 | end |
||
| 169 | end |
||
| 170 | |||
| 171 | def test_read_on_archived_projects_should_fail |
||
| 172 | Project.find(1).update_attribute :status, Project::STATUS_ARCHIVED |
||
| 173 | assert_failure "ls", svn_url |
||
| 174 | end |
||
| 175 | |||
| 176 | def test_read_on_archived_private_projects_should_fail |
||
| 177 | Project.find(1).update_attribute :status, Project::STATUS_ARCHIVED |
||
| 178 | Project.find(1).update_attribute :is_public, false |
||
| 179 | with_credentials "dlopper", "foo" do |
||
| 180 | assert_failure "ls", svn_url |
||
| 181 | end |
||
| 182 | end |
||
| 183 | |||
| 184 | def test_read_on_closed_projects_should_succeed |
||
| 185 | Project.find(1).update_attribute :status, Project::STATUS_CLOSED |
||
| 186 | assert_success "ls", svn_url |
||
| 187 | end |
||
| 188 | |||
| 189 | def test_read_on_closed_private_projects_should_succeed |
||
| 190 | Project.find(1).update_attribute :status, Project::STATUS_CLOSED |
||
| 191 | Project.find(1).update_attribute :is_public, false |
||
| 192 | with_credentials "dlopper", "foo" do |
||
| 193 | assert_success "ls", svn_url |
||
| 194 | end |
||
| 195 | end |
||
| 196 | |||
| 197 | def test_commit_on_closed_projects_should_fail |
||
| 198 | Project.find(1).update_attribute :status, Project::STATUS_CLOSED |
||
| 199 | Role.find(2).add_permission! :commit_access |
||
| 200 | with_credentials "dlopper", "foo" do |
||
| 201 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 202 | end |
||
| 203 | end |
||
| 204 | |||
| 205 | def test_commit_on_closed_private_projects_should_fail |
||
| 206 | Project.find(1).update_attribute :status, Project::STATUS_CLOSED |
||
| 207 | Project.find(1).update_attribute :is_public, false |
||
| 208 | Role.find(2).add_permission! :commit_access |
||
| 209 | with_credentials "dlopper", "foo" do |
||
| 210 | assert_failure "mkdir --message Creating_a_directory", svn_url(random_filename) |
||
| 211 | end |
||
| 212 | end |
||
| 213 | |||
| 214 | if ldap_configured? |
||
| 215 | def test_user_with_ldap_auth_source_should_authenticate_with_ldap_credentials |
||
| 216 | ldap_user = User.new(:mail => 'example1@redmine.org', :firstname => 'LDAP', :lastname => 'user', :auth_source_id => 1) |
||
| 217 | ldap_user.login = 'example1' |
||
| 218 | ldap_user.save! |
||
| 219 | |||
| 220 | with_settings :login_required => '1' do |
||
| 221 | with_credentials "example1", "123456" do |
||
| 222 | assert_success "ls", svn_url |
||
| 223 | end |
||
| 224 | end |
||
| 225 | |||
| 226 | with_settings :login_required => '1' do |
||
| 227 | with_credentials "example1", "wrong" do |
||
| 228 | assert_failure "ls", svn_url |
||
| 229 | end |
||
| 230 | end |
||
| 231 | end |
||
| 232 | end |
||
| 233 | |||
| 234 | def test_checkout |
||
| 235 | Dir.mktmpdir do |dir| |
||
| 236 | assert_success "checkout", svn_url, dir |
||
| 237 | end |
||
| 238 | end |
||
| 239 | |||
| 240 | def test_read_commands |
||
| 241 | assert_success "info", svn_url |
||
| 242 | assert_success "ls", svn_url |
||
| 243 | assert_success "log", svn_url |
||
| 244 | end |
||
| 245 | |||
| 246 | def test_write_commands |
||
| 247 | Role.find(2).add_permission! :commit_access |
||
| 248 | filename = random_filename |
||
| 249 | |||
| 250 | Dir.mktmpdir do |dir| |
||
| 251 | assert_success "checkout", svn_url, dir |
||
| 252 | Dir.chdir(dir) do |
||
| 253 | # creates a file in the working copy |
||
| 254 | f = File.new(File.join(dir, filename), "w") |
||
| 255 | f.write "test file content" |
||
| 256 | f.close |
||
| 257 | |||
| 258 | assert_success "add", filename |
||
| 259 | with_credentials "dlopper", "foo" do |
||
| 260 | assert_success "commit --message Committing_a_file" |
||
| 261 | assert_success "copy --message Copying_a_file", svn_url(filename), svn_url("#{filename}_copy")
|
||
| 262 | assert_success "delete --message Deleting_a_file", svn_url(filename) |
||
| 263 | assert_success "mkdir --message Creating_a_directory", svn_url("#{filename}_dir")
|
||
| 264 | end |
||
| 265 | assert_success "update" |
||
| 266 | |||
| 267 | # checks that the working copy was updated |
||
| 268 | assert File.exists?(File.join(dir, "#{filename}_copy"))
|
||
| 269 | assert File.directory?(File.join(dir, "#{filename}_dir"))
|
||
| 270 | end |
||
| 271 | end |
||
| 272 | end |
||
| 273 | |||
| 274 | def test_read_invalid_repo_should_fail |
||
| 275 | assert_failure "ls", svn_url("invalid")
|
||
| 276 | end |
||
| 277 | |||
| 278 | protected |
||
| 279 | |||
| 280 | def execute(*args) |
||
| 281 | a = [SVN_BIN, "--no-auth-cache --non-interactive"] |
||
| 282 | a << "--username #{username}" if username
|
||
| 283 | a << "--password #{password}" if password
|
||
| 284 | |||
| 285 | super a, *args |
||
| 286 | end |
||
| 287 | |||
| 288 | def svn_url(path=nil) |
||
| 289 | host = ENV['REDMINE_TEST_DAV_SERVER'] || '127.0.0.1' |
||
| 290 | url = "http://#{host}/svn/ecookbook"
|
||
| 291 | url << "/#{path}" if path
|
||
| 292 | url |
||
| 293 | end |
||
| 294 | end |