aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/test/win32reg_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stdlib/test/win32reg_SUITE.erl')
-rw-r--r--lib/stdlib/test/win32reg_SUITE.erl89
1 files changed, 89 insertions, 0 deletions
diff --git a/lib/stdlib/test/win32reg_SUITE.erl b/lib/stdlib/test/win32reg_SUITE.erl
new file mode 100644
index 0000000000..3ad58eba03
--- /dev/null
+++ b/lib/stdlib/test/win32reg_SUITE.erl
@@ -0,0 +1,89 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(win32reg_SUITE).
+
+-export([all/1,long/1,evil_write/1]).
+-export([ostype/1,fini/1]).
+
+-include("test_server.hrl").
+
+all(suite) ->
+ [{conf,ostype,[long,evil_write],fini}].
+
+ostype(Config) when is_list(Config) ->
+ case os:type() of
+ {win32, _} ->
+ Config;
+ _ ->
+ {skip,"Doesn't run on UNIX."}
+ end.
+fini(Config) when is_list(Config) ->
+ Config.
+
+long(doc) -> "Test long keys and entries (OTP-3446).";
+long(Config) when list(Config) ->
+ ?line Dog = test_server:timetrap(test_server:seconds(10)),
+
+ ?line LongKey = "software\\" ++
+ lists:flatten(lists:duplicate(10, "..\\software\\")) ++
+ "Ericsson\\Erlang",
+ ?line {ok,Reg} = win32reg:open([read,write]),
+ ?line ok = win32reg:change_key(Reg, "\\hklm"),
+ ?line ok = win32reg:change_key(Reg, LongKey),
+ ?line {ok,ErlangKey} = win32reg:current_key(Reg),
+ io:format("Erlang key: ~s", [ErlangKey]),
+
+ %% Write a long value and read it back.
+ ?line TestKey = "test_key",
+ ?line LongValue = lists:concat(["This is a long value generated by the test case ",?MODULE,":long/1. "|lists:duplicate(128, "a")]),
+ ?line ok = win32reg:set_value(Reg, TestKey, LongValue),
+ ?line {ok,LongValue} = win32reg:value(Reg, TestKey),
+
+ %% Done.
+
+ ?line ok = win32reg:close(Reg),
+ ?line test_server:timetrap_cancel(Dog),
+ ok.
+
+evil_write(Config) when list(Config) ->
+ ?line Dog = test_server:timetrap(test_server:seconds(10)),
+
+ ?line Key = "Software\\Ericsson\\Erlang",
+ ?line {ok,Reg} = win32reg:open([read,write]),
+ ?line ok = win32reg:change_key(Reg, "\\hklm"),
+ ?line ok = win32reg:change_key(Reg, Key),
+ ?line {ok,ErlangKey} = win32reg:current_key(Reg),
+ io:format("Erlang key: ~s", [ErlangKey]),
+
+ %% Write keys with different length and read it back.
+ ?line TestKey = "test_key " ++ lists:duplicate(128, $a),
+ evil_write_1(Reg, TestKey),
+
+ %% Done.
+ ?line ok = win32reg:close(Reg),
+ ?line test_server:timetrap_cancel(Dog),
+ ok.
+
+evil_write_1(Reg, [_|[_|_]=Key]=Key0) ->
+ ?line io:format("Key = ~p\n", [Key0]),
+ ?line ok = win32reg:set_value(Reg, Key0, "A good value for me"),
+ ?line {ok,_Val} = win32reg:value(Reg, Key0),
+ ?line ok = win32reg:delete_value(Reg, Key0),
+ evil_write_1(Reg, Key);
+evil_write_1(_, [_]) -> ok.