summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLars Kanis <lars@greiz-reinsdorf.de>2024-10-04 22:30:02 +0200
committergit <svn-admin@ruby-lang.org>2024-10-17 01:48:05 +0000
commit6a49bbd73406155159d11dca17181f356bdaa4c1 (patch)
tree692a7db4a6814cd87559693939312b1a13a5a47f /test
parent36b7ad3caa72bc0638d528dcb18682b94ff89b7e (diff)
[ruby/win32-registry] Move all tests to volatile environment and use per-test individual registry key
This allows to run all tests in parallel. Usage of `File` methods is avoided. Since all tests are executed in the volatile environment of the registry, the dedicated 'create_volatile' test is removed now. Also add some documentation to the test setup. Downside of this use of the "Volatile Environment" is that we can not use or test the `create` method with default options. This is because within this path only keys with option `REG_OPTION_VOLATILE` are allowed. https://github.com/ruby/win32-registry/commit/3c186ae7dd
Diffstat (limited to 'test')
-rw-r--r--test/win32/test_registry.rb104
1 files changed, 57 insertions, 47 deletions
diff --git a/test/win32/test_registry.rb b/test/win32/test_registry.rb
index 8a98405a79..a4fa37402f 100644
--- a/test/win32/test_registry.rb
+++ b/test/win32/test_registry.rb
@@ -12,18 +12,38 @@ end
if defined?(Win32::Registry)
class TestWin32Registry < Test::Unit::TestCase
COMPUTERNAME = 'SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ComputerName'
-
- private def backslachs(path)
- path.gsub("/", "\\")
+ TEST_REGISTRY_PATH = 'Volatile Environment'
+ TEST_REGISTRY_KEY = 'ruby-win32-registry-test-<RND>'
+
+ # Create a new registry key per test in an atomic way, which is deleted on teardown.
+ #
+ # Fills the following instance variables:
+ #
+ # @test_registry_key - A registry path which is not yet created,
+ # but can be created without collisions even when running
+ # multiple test processes.
+ # @test_registry_rnd - The part of the registry path with a random number.
+ # @createopts - Required parameters (desired, opt) for create method in
+ # the volatile environment of the registry.
+ def setup
+ @createopts = [Win32::Registry::KEY_ALL_ACCESS, Win32::Registry::REG_OPTION_VOLATILE]
+ 100.times do |i|
+ k = TEST_REGISTRY_KEY.gsub("<RND>", i.to_s)
+ next unless Win32::Registry::HKEY_CURRENT_USER.create(
+ TEST_REGISTRY_PATH + "\\" + k,
+ *@createopts
+ ).created?
+ @test_registry_key = TEST_REGISTRY_PATH + "\\" + k + "\\" + "test\\"
+ @test_registry_rnd = k
+ break
+ end
+ omit "Unused registry subkey not found in #{TEST_REGISTRY_KEY}" unless @test_registry_key
end
- TEST_REGISTRY_KEY = "SOFTWARE/ruby-win32-registry-test/"
-
- def setup
- Win32::Registry::HKEY_CURRENT_USER.open(backslachs(File.dirname(TEST_REGISTRY_KEY))) do |reg|
- reg.delete_key File.basename(TEST_REGISTRY_KEY), true
+ def teardown
+ Win32::Registry::HKEY_CURRENT_USER.open(TEST_REGISTRY_PATH) do |reg|
+ reg.delete_key @test_registry_rnd, true
end
- rescue Win32::Registry::Error
end
def test_predefined
@@ -39,9 +59,9 @@ if defined?(Win32::Registry)
end
def test_open_no_block
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)).close
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts).close
- reg = Win32::Registry::HKEY_CURRENT_USER.open(backslachs(TEST_REGISTRY_KEY), Win32::Registry::KEY_ALL_ACCESS)
+ reg = Win32::Registry::HKEY_CURRENT_USER.open(@test_registry_key, Win32::Registry::KEY_ALL_ACCESS)
assert_kind_of Win32::Registry, reg
assert_equal true, reg.open?
assert_equal false, reg.created?
@@ -53,10 +73,10 @@ if defined?(Win32::Registry)
end
def test_open_with_block
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)).close
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts).close
regs = []
- Win32::Registry::HKEY_CURRENT_USER.open(backslachs(TEST_REGISTRY_KEY), Win32::Registry::KEY_ALL_ACCESS) do |reg|
+ Win32::Registry::HKEY_CURRENT_USER.open(@test_registry_key, Win32::Registry::KEY_ALL_ACCESS) do |reg|
regs << reg
assert_equal true, reg.open?
assert_equal false, reg.created?
@@ -92,17 +112,8 @@ if defined?(Win32::Registry)
end
end
- def test_create_volatile
- desired = Win32::Registry::KEY_ALL_ACCESS
- option = Win32::Registry::REG_OPTION_VOLATILE
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY), desired) do |reg|
- reg.create("volkey", desired, option) {}
- reg.delete_key("volkey", true)
- end
- end
-
def test_create_no_block
- reg = Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY))
+ reg = Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts)
assert_kind_of Win32::Registry, reg
assert_equal true, reg.open?
assert_equal true, reg.created?
@@ -116,7 +127,7 @@ if defined?(Win32::Registry)
def test_create_with_block
regs = []
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
regs << reg
reg["test"] = "abc"
assert_equal true, reg.open?
@@ -132,8 +143,7 @@ if defined?(Win32::Registry)
end
def test_write
- desired = Win32::Registry::KEY_ALL_ACCESS
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY), desired) do |reg|
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
reg.write_s("key1", "data")
assert_equal [Win32::Registry::REG_SZ, "data"], reg.read("key1")
reg.write_i("key2", 0x5fe79027)
@@ -142,32 +152,32 @@ if defined?(Win32::Registry)
end
def test_accessors
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
assert_kind_of Integer, reg.hkey
assert_kind_of Win32::Registry, reg.parent
assert_equal "HKEY_CURRENT_USER", reg.parent.name
- assert_equal "SOFTWARE\\ruby-win32-registry-test\\", reg.keyname
+ assert_equal "Volatile Environment\\#{@test_registry_rnd}\\test\\", reg.keyname
assert_equal Win32::Registry::REG_CREATED_NEW_KEY, reg.disposition
end
end
def test_name
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- assert_equal "HKEY_CURRENT_USER\\SOFTWARE\\ruby-win32-registry-test\\", reg.name
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ assert_equal "HKEY_CURRENT_USER\\Volatile Environment\\#{@test_registry_rnd}\\test\\", reg.name
end
end
def test_keys
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- reg.create("key1")
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ reg.create("key1", *@createopts)
assert_equal ["key1"], reg.keys
end
end
def test_each_key
keys = []
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- reg.create("key1")
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ reg.create("key1", *@createopts)
reg.each_key { |*a| keys << a }
end
assert_equal [2], keys.map(&:size)
@@ -177,10 +187,10 @@ if defined?(Win32::Registry)
def test_each_key_enum
keys = nil
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- reg.create("key1")
- reg.create("key2")
- reg.create("key3")
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ reg.create("key1", *@createopts)
+ reg.create("key2", *@createopts)
+ reg.create("key3", *@createopts)
reg["value1"] = "abcd"
keys = reg.each_key.to_a
end
@@ -190,8 +200,8 @@ if defined?(Win32::Registry)
end
def test_values
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- reg.create("key1")
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ reg.create("key1", *@createopts)
reg["value1"] = "abcd"
assert_equal ["abcd"], reg.values
end
@@ -199,8 +209,8 @@ if defined?(Win32::Registry)
def test_each_value
vals = []
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- reg.create("key1")
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ reg.create("key1", *@createopts)
reg["value1"] = "abcd"
reg.each_value { |*a| vals << a }
end
@@ -209,8 +219,8 @@ if defined?(Win32::Registry)
def test_each_value_enum
vals = nil
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- reg.create("key1")
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ reg.create("key1", *@createopts)
reg["value1"] = "abcd"
reg["value2"] = 42
vals = reg.each_value.to_a
@@ -221,9 +231,9 @@ if defined?(Win32::Registry)
def test_utf8_encoding
keys = []
- Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg|
- reg.create("abc EUR")
- reg.create("abc €")
+ Win32::Registry::HKEY_CURRENT_USER.create(@test_registry_key, *@createopts) do |reg|
+ reg.create("abc EUR", *@createopts)
+ reg.create("abc €", *@createopts)
reg.each_key do |subkey|
keys << subkey
end