##// END OF EJS Templates
Fixed that project activity without parent hides system activities and removed duplicated code....
Fixed that project activity without parent hides system activities and removed duplicated code. git-svn-id: http://svn.redmine.org/redmine/trunk@14292 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r13646:8ad326f1609c
r13910:48d40a8c8884
Show More
issue_nested_set_concurrency_test.rb
96 lines | 2.7 KiB | text/x-ruby | RubyLexer
/ test / unit / issue_nested_set_concurrency_test.rb
Jean-Philippe Lang
Replaces awesome_nested_set gem with a simple and more robust implementation of nested sets....
r13459 # Redmine - project management software
Jean-Philippe Lang
Copyright update....
r13490 # Copyright (C) 2006-2015 Jean-Philippe Lang
Jean-Philippe Lang
Replaces awesome_nested_set gem with a simple and more robust implementation of nested sets....
r13459 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.expand_path('../../test_helper', __FILE__)
class IssueNestedSetConcurrencyTest < ActiveSupport::TestCase
fixtures :projects, :users,
:trackers, :projects_trackers,
:enabled_modules,
:issue_statuses,
:enumerations
self.use_transactional_fixtures = false
def setup
Jean-Philippe Lang
Adds a test for #6579....
r13646 skip if sqlite?
Jean-Philippe Lang
Replaces awesome_nested_set gem with a simple and more robust implementation of nested sets....
r13459 CustomField.delete_all
end
def teardown
Issue.delete_all
end
def test_concurrency
Jean-Philippe Lang
Adds a test for #6579....
r13646 # Generates an issue and destroys it in order
# to load all needed classes before starting threads
i = Issue.generate!
i.destroy
Jean-Philippe Lang
Replaces awesome_nested_set gem with a simple and more robust implementation of nested sets....
r13459
Jean-Philippe Lang
Adds a test for #6579....
r13646 root = Issue.generate!
assert_difference 'Issue.count', 60 do
threaded(3) do
10.times do
i = Issue.generate! :parent_issue_id => root.id
c1 = Issue.generate! :parent_issue_id => i.id
c2 = Issue.generate! :parent_issue_id => i.id
c3 = Issue.generate! :parent_issue_id => i.id
c2.reload.destroy
c1.reload.destroy
end
end
end
end
def test_concurrent_subtasks_creation
root = Issue.generate!
assert_difference 'Issue.count', 30 do
threaded(3) do
10.times do
Issue.generate! :parent_issue_id => root.id
end
end
end
root.reload
assert_equal [1, 62], [root.lft, root.rgt]
children_bounds = root.children.sort_by(&:lft).map {|c| [c.lft, c.rgt]}.flatten
assert_equal (2..61).to_a, children_bounds
end
private
def threaded(count, &block)
with_settings :notified_events => [] do
threads = []
count.times do |i|
threads << Thread.new(i) do
ActiveRecord::Base.connection_pool.with_connection do
begin
yield
rescue Exception => e
Thread.current[:exception] = e.message
Jean-Philippe Lang
Replaces awesome_nested_set gem with a simple and more robust implementation of nested sets....
r13459 end
end
end
Jean-Philippe Lang
Adds a test for #6579....
r13646 end
threads.each do |thread|
thread.join
assert_nil thread[:exception]
Jean-Philippe Lang
Replaces awesome_nested_set gem with a simple and more robust implementation of nested sets....
r13459 end
end
end
end