diff options
Diffstat (limited to 'lib/cosFileTransfer/test/fileTransfer_SUITE.erl')
-rw-r--r-- | lib/cosFileTransfer/test/fileTransfer_SUITE.erl | 938 |
1 files changed, 0 insertions, 938 deletions
diff --git a/lib/cosFileTransfer/test/fileTransfer_SUITE.erl b/lib/cosFileTransfer/test/fileTransfer_SUITE.erl deleted file mode 100644 index 12aef2913a..0000000000 --- a/lib/cosFileTransfer/test/fileTransfer_SUITE.erl +++ /dev/null @@ -1,938 +0,0 @@ -%%----------------------------------------------------------------------- -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2000-2016. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% -%% -%%---------------------------------------------------------------------- -%% File : fileTransfer_SUITE.erl -%% Purpose : -%%---------------------------------------------------------------------- - --module(fileTransfer_SUITE). - -%%--------------- INCLUDES ----------------------------------- --include_lib("cosFileTransfer/src/cosFileTransferApp.hrl"). - --include_lib("common_test/include/ct.hrl"). - -%%--------------- DEFINES ------------------------------------ --define(default_timeout, test_server:minutes(20)). --define(match(ExpectedRes, Expr), - fun() -> - AcTuAlReS = (catch (Expr)), - case AcTuAlReS of - ExpectedRes -> - io:format("------ CORRECT RESULT ------~n~p~n", - [AcTuAlReS]), - AcTuAlReS; - _ -> - io:format("###### ERROR ERROR ######~n~p~n", - [AcTuAlReS]), - exit(AcTuAlReS) - end - end()). - --define(matchnopr(ExpectedRes, Expr), - fun() -> - AcTuAlReS = (catch (Expr)), - case AcTuAlReS of - ExpectedRes -> - io:format("------ CORRECT RESULT (~p) ------~n", [?LINE]), - AcTuAlReS; - _ -> - io:format("###### ERROR ERROR ######~n~p~n", - [AcTuAlReS]), - exit(AcTuAlReS) - end - end()). - - - - - -%%----------------------------------------------------------------- -%% External exports -%%----------------------------------------------------------------- --export([all/0,suite/0,groups/0, - init_per_group/2,end_per_group/2, - cases/0, - init_per_suite/1, - end_per_suite/1, - fileIterator_api/1, - fts_ftp_file_api/1, - fts_ftp_file_ssl_api/1, - fts_ftp_dir_api/1, - fts_native_file_api/1, - fts_native_file_ssl_api/1, - fts_native_dir_api/1, - init_per_testcase/2, - end_per_testcase/2, - install_data/2, - uninstall_data/1, - slave_sup/0, - app_test/1]). - -%%----------------------------------------------------------------- -%% Func: all/1 -%% Args: -%% Returns: -%%----------------------------------------------------------------- -suite() -> - [{ct_hooks,[ts_install_cth]}]. - -all() -> - cases(). - -groups() -> - []. - - - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - -cases() -> - [fts_ftp_dir_api, fts_ftp_file_api, - fts_ftp_file_ssl_api, fts_native_dir_api, - fts_native_file_api, fts_native_file_ssl_api, - fileIterator_api, app_test]. - -%%----------------------------------------------------------------- -%% Init and cleanup functions. -%%----------------------------------------------------------------- - -init_per_testcase(_Case, Config) -> - Dog=test_server:timetrap(?default_timeout), - [{watchdog, Dog}|Config]. - - -end_per_testcase(_Case, Config) -> - Dog = proplists:get_value(watchdog, Config), - test_server:timetrap_cancel(Dog), - ok. - -init_per_suite(Config) -> - case crypto_works() of - false -> - {skip,"Could not start crypto!"}; - true -> - orber:jump_start(), - cosProperty:install(), - cosProperty:start(), - Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]), - %% Client - cosFileTransferApp:configure(ssl_client_certfile, - filename:join([Dir, "client", "cert.pem"])), - cosFileTransferApp:configure(ssl_client_cacertfile, - filename:join([Dir, "client", "cacerts.pem"])), - cosFileTransferApp:configure(ssl_client_verify, 1), - cosFileTransferApp:configure(ssl_client_depth, 0), - %% Server - cosFileTransferApp:configure(ssl_server_certfile, - filename:join([Dir, "server", "cert.pem"])), - cosFileTransferApp:configure(ssl_server_cacertfile, - filename:join([Dir, "server", "cacerts.pem"])), - cosFileTransferApp:configure(ssl_server_verify, 1), - cosFileTransferApp:configure(ssl_server_depth, 0), - crypto:start(), - ssl:start(), - cosFileTransferApp:install(), - cosFileTransferApp:start(), - if - is_list(Config) -> - Config; - true -> - exit("Config not a list") - end - end. - -crypto_works() -> - try crypto:start() of - {error,{already_started,crypto}} -> true; - ok -> true - catch - error:_ -> - false - end. - -end_per_suite(Config) -> - ssl:stop(), - crypto:stop(), - cosFileTransferApp:stop(), - cosProperty:stop(), - cosProperty:uninstall(), - cosFileTransferApp:uninstall(), - orber:jump_stop(), - Config. - -%%----------------------------------------------------------------- -%% Local definitions -%%----------------------------------------------------------------- --define(FTP_USER, "anonymous"). --define(FTP_PASS, "fileTransfer_SUITE@localhost"). --define(TEST_DIR,["/", "incoming"]). - --define(FTP_PORT, 21). --define(FTP_ACC, "anonymous"). - --define(BAD_HOST, "badhostname"). --define(BAD_USER, "baduser"). --define(BAD_DIR, "baddirectory"). - --define(TEST_FILE_DATA, "If this file exists after a completed test an error occurred."). --define(TEST_FILE_DATA2, "1234567890123"). - -%%----------------------------------------------------------------- -%% aoo-file test -%%----------------------------------------------------------------- -app_test(_Config) -> - ok=?t:app_test(cosFileTransfer), - ok. - -%%----------------------------------------------------------------- -%% FileIterator API tests -%%----------------------------------------------------------------- -fileIterator_api(Config) -> - case ftp_host(Config) of - {skipped, SkippedReason} -> - {skipped, SkippedReason}; - Host -> - - {ok, Node} = create_node("fileIterator_api", 4008, normal), - ?match(ok, remote_apply(Node, ?MODULE, install_data, - [tcp, {{'NATIVE', - 'cosFileTransferNATIVE_file'}, Host, - "fileIterator_api"}])), - - %% Create a Virtual File System. -%% VFS = ?match({_,_,_,_,_,_}, -%% cosFileTransferApp:create_VFS({'NATIVE', -%% 'cosFileTransferNATIVE_file'}, -%% [], Host, ?FTP_PORT)), - VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_}, - corba:string_to_object("corbaname::1.2@localhost:4008/NameService#fileIterator_api")), - - %% Start two File Transfer Sessions (Source and Target). - {FS, Dir} = ?matchnopr({{_,_,_},{_,_,_}}, - 'CosFileTransfer_VirtualFileSystem':login(VFS, - ?FTP_USER, - ?FTP_PASS, - ?FTP_ACC)), - - %% Do some basic test on one of the Directories attributes. - ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(Dir)), - ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(Dir)), - ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(Dir)), - ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(Dir)), - {ok,[],FileIter} = ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir, 0)), - %% Usually the working directory for the test is not empty so no need for - %% creating files of our own?! - #any{value=Children} = ?match({any, _, _}, - 'CosPropertyService_PropertySet': - get_property_value(Dir, "num_children")), - - if - Children > 5 -> - ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)), - ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter, 3)), - ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter, - Children)), - ?matchnopr({false, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)), - ?match({false, []}, 'CosFileTransfer_FileIterator':next_n(FileIter, 1)), - ok; - true -> - ok - end, - ?match(ok, 'CosFileTransfer_FileIterator':destroy(FileIter)), - ?match(false, corba_object:non_existent(FS)), - ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)), - %% To make sure Orber can remove it from mnesia. - timer:sleep(1000), - ?match(true, corba_object:non_existent(FS)), - ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, ["fileIterator_api"])), - stop_orber_remote(Node, normal), - ok - end. - - -%%----------------------------------------------------------------- -%% FileTransferSession API tests -%%----------------------------------------------------------------- -fts_ftp_file_api(Config) -> - {ok, Node} = create_node("ftp_file_api", 4004, normal), - file_helper(Config, 'FTP', ?TEST_DIR, Node, 4004, "ftp_file_api", tcp). - -fts_ftp_file_ssl_api(Config) -> - {ok, Node} = create_node("ftp_file_api_ssl", {4005, 1}, ssl), - file_helper(Config, 'FTP', ?TEST_DIR, Node, 4005, "ftp_file_api_ssl", ssl). - -fts_native_file_api(Config) -> - {ok, Node} = create_node("native_file_api", 4006, normal), - {ok, Pwd} = file:get_cwd(), - file_helper(Config,{'NATIVE', 'cosFileTransferNATIVE_file'},filename:split(Pwd), - Node, 4006, "native_file_api", tcp). - -fts_native_file_ssl_api(Config) -> - {ok, Node} = create_node("native_file_ssl_api", {4007, 1}, ssl), - {ok, Pwd} = file:get_cwd(), - file_helper(Config,{'NATIVE', 'cosFileTransferNATIVE_file'},filename:split(Pwd), - Node, 4007, "native_file_ssl_api", ssl). - - -file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) -> - case ftp_host(Config) of - {skipped, SkippedReason} -> - {skipped, SkippedReason}; - Host -> - TEST_SOURCE = TEST_DIR ++ [create_name(remove_me_source)], - TEST_SOURCE2 = TEST_DIR ++ [create_name(remove_me_source)], - TEST_TARGET = TEST_DIR ++ [create_name(remove_me_target)], - - io:format("<<<<<< CosFileTransfer Testing Configuration >>>>>>~n",[]), - io:format("Source: ~p~nTarget: ~p~n", [TEST_SOURCE, TEST_TARGET]), - - ?match(ok, remote_apply(Node, ?MODULE, install_data, - [Type, {WhichType, Host, Name}])), - - VFST = ?match({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_}, - corba:string_to_object("corbaname::1.2@localhost:"++integer_to_list(Port)++"/NameService#"++Name)), - - - %% Create a Virtual File System. - VFS = ?match({_,_,_,_,_,_}, - cosFileTransferApp:create_VFS(WhichType, [], Host, ?FTP_PORT, - [{protocol, Type}])), - %% Start two File Transfer Sessions (Source and Target). - {FST, _DirT} = ?match({{_,_,_},{_,_,_}}, - 'CosFileTransfer_VirtualFileSystem':login(VFST, - ?FTP_USER, - ?FTP_PASS, - ?FTP_ACC)), - {FSS, DirS} = ?match({{_,_,_,_,_,_},{_,_,_,_,_,_}}, - 'CosFileTransfer_VirtualFileSystem':login(VFS, - ?FTP_USER, - ?FTP_PASS, - ?FTP_ACC)), - - %% Do some basic test on one of the Directories attributes. - ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)), - ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)), - ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)), - ?match(FSS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)), - - %% Get a FileList before we create any new Files - #'CosFileTransfer_FileWrapper'{the_file = Dir} = - ?match({'CosFileTransfer_FileWrapper', _, ndirectory}, - 'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_DIR)), - {ok,FileList, Iter1} = ?match({ok,_,_}, 'CosFileTransfer_Directory':list(Dir, 10)), - loop_files(FileList), - - case Iter1 of - {'IOP_IOR',[],[]} -> - ok; - _-> - ?match(ok, 'CosFileTransfer_FileIterator':destroy(Iter1)) - end, - - #any{value=Count1} = ?match({any, _, _}, 'CosPropertyService_PropertySet': - get_property_value(Dir, "num_children")), - - %% Now we want to transfer a file from source to target. First, we'll create - %% a a file to work with. - create_file_on_source_node(WhichType, Config, Host, - filename:join(TEST_SOURCE), TEST_DIR, - ?TEST_FILE_DATA), - create_file_on_source_node(WhichType, Config, Host, - filename:join(TEST_SOURCE2), TEST_DIR, - ?TEST_FILE_DATA2), - - #'CosFileTransfer_FileWrapper'{the_file = FileS} = - ?matchnopr({'CosFileTransfer_FileWrapper', _, nfile}, - 'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_SOURCE)), - #'CosFileTransfer_FileWrapper'{the_file = FileS2} = - ?matchnopr({'CosFileTransfer_FileWrapper', _, nfile}, - 'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_SOURCE2)), - - #any{value=Count2} = ?match({any, _, _}, 'CosPropertyService_PropertySet': - get_property_value(Dir, "num_children")), - timer:sleep(2000), - ?match(true, (Count1+2 == Count2)), - - %% Create a target File - FileT = ?matchnopr({_,_,_}, - 'CosFileTransfer_FileTransferSession':create_file(FST, TEST_TARGET)), - %% Try to delete the non-existing file. - ?match({'EXCEPTION', _}, - 'CosFileTransfer_FileTransferSession':delete(FST, FileT)), - - ?match(ok, 'CosFileTransfer_FileTransferSession':transfer(FSS, FileS, FileT)), - - %% Remove this test when ftp supports append. - case WhichType of - {'NATIVE', 'cosFileTransferNATIVE_file'} -> - ?match(ok, 'CosFileTransfer_FileTransferSession':append(FSS, FileS, FileT)), - ?match(ok, 'CosFileTransfer_FileTransferSession':insert(FSS, FileS2, FileT, 7)); - _-> - ok - end, - - %% Delete source and target files - ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS)), - ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS2)), - ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FST, FileT)), - - %% Should be back where we started. - timer:sleep(2000), - #any{value=Count3} = ?match({any, _, _}, 'CosPropertyService_PropertySet': - get_property_value(Dir, "num_children")), - ?match(true, (Count1 == Count3)), - - - ?match(false, corba_object:non_existent(FSS)), - ?match(false, corba_object:non_existent(FST)), - ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FSS)), - ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FST)), - %% To make sure Orber can remove it from mnesia. - timer:sleep(2000), - ?match(true, corba_object:non_existent(FSS)), - ?match(true, corba_object:non_existent(FST)), - ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])), - stop_orber_remote(Node, normal), - ok - end. - -%%----------------------------------------------------------------- -%% FileTransferSession API tests -%%----------------------------------------------------------------- -fts_ftp_dir_api(Config) -> - {ok, Node} = create_node("ftp_dir_api", 4009, normal), - dir_helper(Config, 'FTP', ?TEST_DIR, Node, 4009, "ftp_dir_api"). - -fts_native_dir_api(Config) -> - {ok, Node} = create_node("native_dir_api", 4010, normal), - {ok, Pwd} = file:get_cwd(), - dir_helper(Config, {'NATIVE', 'cosFileTransferNATIVE_file'}, - filename:split(Pwd), Node, 4010, "native_dir_api"). - -dir_helper(Config, WhichType, TEST_DIR, Node, Port, Name) -> - case ftp_host(Config) of - {skipped, SkippedReason} -> - {skipped, SkippedReason}; - Host -> - TEST_DIR_LEVEL1 = TEST_DIR ++ [create_name(remove_me_dir1)], - TEST_DIR_LEVEL2 = TEST_DIR_LEVEL1 ++ [create_name(remove_me_dir2)], - - io:format("<<<<<< CosFileTransfer Testing Configuration >>>>>>~n",[]), - io:format("Top Dir: ~p~nLevel2 Dir: ~p~n", [TEST_DIR_LEVEL1, TEST_DIR_LEVEL2]), - - ?match(ok, remote_apply(Node, ?MODULE, install_data, - [tcp, {WhichType, Host, Name}])), - - VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_}, - corba:string_to_object("corbaname::1.2@localhost:"++integer_to_list(Port)++"/NameService#"++Name)), - - %% Start two File Transfer Sessions (Source and Target). - {FS, DirS} = ?matchnopr({{'IOP_IOR',_,_}, _}, - 'CosFileTransfer_VirtualFileSystem':login(VFS, - ?FTP_USER, - ?FTP_PASS, - ?FTP_ACC)), - - %% Do some basic test on one of the Directories attributes. - ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)), - ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)), - ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)), - ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)), - - %% Create a Root Directory. Currently we only need to create one but - %% later on, when supporting other protocols than FTP it's not enough. - Dir1 = 'CosFileTransfer_FileTransferSession':create_directory(FS, - TEST_DIR_LEVEL1), - io:format("<<<<<< CosFileTransfer Testing Properties >>>>>>~n",[]), - ?match({ok, [tk_long, tk_boolean]}, - 'CosFileTransfer_Directory':get_allowed_property_types(Dir1)), - ?match({ok, [_,_]}, - 'CosFileTransfer_Directory':get_allowed_properties(Dir1)), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property_with_mode(Dir1, - "num_children", - #any{typecode=tk_long, value=0}, - fixed_readonly)), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property_with_mode(Dir1, - "wrong", - #any{typecode=tk_long, value=0}, - fixed_readonly)), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property_with_mode(Dir1, - "num_children", - #any{typecode=tk_short, value=0}, - fixed_readonly)), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property_with_mode(Dir1, - "num_children", - #any{typecode=tk_long, value=0}, - fixed_normal)), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_properties_with_modes(Dir1, - [#'CosPropertyService_PropertyDef' - {property_name = "num_children", - property_value = #any{typecode=tk_long, value=0}, - property_mode = fixed_readonly}])), - ?match(fixed_readonly, - 'CosFileTransfer_Directory':get_property_mode(Dir1, "num_children")), - ?match({true, - [#'CosPropertyService_PropertyMode'{property_name = "num_children", - property_mode = fixed_readonly}]}, - 'CosFileTransfer_Directory':get_property_modes(Dir1, ["num_children"])), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':set_property_mode(Dir1, "num_children", fixed_readonly)), - - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory': - set_property_modes(Dir1, - [#'CosPropertyService_PropertyMode' - {property_name = "num_children", - property_mode = fixed_readonly}])), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory': - set_property_modes(Dir1, - [#'CosPropertyService_PropertyMode' - {property_name = "wrong", - property_mode = fixed_readonly}])), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory': - set_property_modes(Dir1, - [#'CosPropertyService_PropertyMode' - {property_name = "num_children", - property_mode = fixed_normal}])), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property(Dir1, - "num_children", - #any{typecode=tk_long, value=0})), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property(Dir1, - "wrong", - #any{typecode=tk_long, value=0})), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property(Dir1, - "num_children", - #any{typecode=tk_short, value=0})), - - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':define_property(Dir1, - "num_children", - #any{typecode=tk_long, value=0})), - - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory': - define_properties(Dir1, - [#'CosPropertyService_Property' - {property_name = "num_children", - property_value = #any{typecode=tk_long, - value=0}}])), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory': - define_properties(Dir1, - [#'CosPropertyService_Property' - {property_name = "wrong", - property_value = #any{typecode=tk_long, - value=0}}])), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory': - define_properties(Dir1, - [#'CosPropertyService_Property' - {property_name = "num_children", - property_value = #any{typecode=tk_short, - value=0}}])), - ?match(2, 'CosFileTransfer_Directory':get_number_of_properties(Dir1)), - - ?match({ok, ["num_children", "is_directory"], {'IOP_IOR',[],[]}}, - 'CosFileTransfer_Directory':get_all_property_names(Dir1, 2)), - ?match({ok, ["is_directory"], _}, - 'CosFileTransfer_Directory':get_all_property_names(Dir1, 1)), - - ?match(#any{}, - 'CosFileTransfer_Directory':get_property_value(Dir1, "num_children")), - ?match(#any{}, - 'CosFileTransfer_Directory':get_property_value(Dir1, "is_directory")), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':get_property_value(Dir1, "wrong")), - - ?match({true, - [#'CosPropertyService_Property'{property_name = "num_children"}]}, - 'CosFileTransfer_Directory':get_properties(Dir1, ["num_children"])), - ?match({false, - [#'CosPropertyService_Property'{property_name = "wrong"}]}, - 'CosFileTransfer_Directory':get_properties(Dir1, ["wrong"])), - - ?match({ok, [_],_}, - 'CosFileTransfer_Directory':get_all_properties(Dir1, 1)), - ?match({ok, [_,_], {'IOP_IOR',[],[]}}, - 'CosFileTransfer_Directory':get_all_properties(Dir1, 2)), - - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':delete_property(Dir1, "num_children")), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':delete_property(Dir1, "wrong")), - - - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':delete_properties(Dir1, ["num_children"])), - ?match({'EXCEPTION', _}, - 'CosFileTransfer_Directory':delete_properties(Dir1, ["wrong"])), - ?match(false, 'CosFileTransfer_Directory':delete_all_properties(Dir1)), - ?match(true, - 'CosFileTransfer_Directory':is_property_defined(Dir1, "num_children")), - ?match(false, - 'CosFileTransfer_Directory':is_property_defined(Dir1, "wrong")), - - %% The Top Dir should be empty and ... - ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)), - ?match( #any{value=0}, - 'CosPropertyService_PropertySet':get_property_value(Dir1, "num_children")), - %% Create a sub-directory. - Dir2 = 'CosFileTransfer_FileTransferSession':create_directory(FS, - TEST_DIR_LEVEL2), - ?match( #any{value=1}, - 'CosPropertyService_PropertySet':get_property_value(Dir1, "num_children")), - - ?match({ok, [_,_], {'IOP_IOR',[],[]}}, - 'CosFileTransfer_Directory':get_all_properties(Dir1, 2)), - {_,_,Iterator1} = ?match({ok, [_], _}, - 'CosFileTransfer_Directory':get_all_properties(Dir1, 1)), - ?match({false, [_]}, - 'CosPropertyService_PropertiesIterator':next_n(Iterator1,4)), - - {_,_,Iterator0} = ?match({ok, [], _}, - 'CosFileTransfer_Directory':get_all_properties(Dir1, 0)), - - ?match({false, [_, {'CosPropertyService_Property', - "num_children",{any,tk_long,1}}]}, - 'CosPropertyService_PropertiesIterator':next_n(Iterator0,4)), - - ?match({true, - [#'CosPropertyService_Property'{property_name = "num_children"}]}, - 'CosFileTransfer_Directory':get_properties(Dir1, ["num_children"])), - - %% The Top Directory is not emtpy any more and ... - {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef}],_} = - ?matchnopr({ok,[{'CosFileTransfer_FileWrapper', _, ndirectory}],_}, - 'CosFileTransfer_Directory':list(Dir1, 1000)), - %% ... its name eq. to 'TEST_DIR_LEVEL2' - ?match(TEST_DIR_LEVEL2, - 'CosFileTransfer_Directory':'_get_complete_file_name'(DirRef)), - - #'CosFileTransfer_FileWrapper'{the_file = Dir3} = - ?matchnopr({'CosFileTransfer_FileWrapper', _, ndirectory}, - 'CosFileTransfer_FileTransferSession':get_file(FS, TEST_DIR_LEVEL1)), - - %% Must get the same result for the 'get_file' operation. - {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef2}],_} = - ?matchnopr({ok,[{'CosFileTransfer_FileWrapper', _, ndirectory}],_}, - 'CosFileTransfer_Directory':list(Dir3,1000)), - ?match(TEST_DIR_LEVEL2, - 'CosFileTransfer_Directory':'_get_complete_file_name'(DirRef2)), - - %% Since the top directory isn't empty deleting it must fail. - ?match({'EXCEPTION', _}, - 'CosFileTransfer_FileTransferSession':delete(FS, Dir1)), - - %% Delete the sub-directory and ... - ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir2)), - %% ... see if the top directory realyy is empty. - ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)), - - ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir1)), - %% Test if the top directory been removed as intended. - ?match({'EXCEPTION', {'CosFileTransfer_FileNotFoundException', _, _}}, - 'CosFileTransfer_FileTransferSession':get_file(FS, TEST_DIR_LEVEL1)), - - ?match(false, corba_object:non_existent(FS)), - ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)), - %% To make sure Orber can remove it from mnesia. - timer:sleep(1000), - ?match(true, corba_object:non_existent(FS)), - ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])), - stop_orber_remote(Node, normal), - ok - end. - - -%%----------------------------------------------------------------- -%% Internal functions -%%----------------------------------------------------------------- -ftp_host(Config) -> - case ?config(ftp_remote_host, Config) of - undefined -> - {skipped, "The configuration parameter 'ftp_remote_host' not defined."}; - Host -> - Host - end. - -loop_files([]) -> - io:format("@@@ DONE @@@~n", []); -loop_files([#'CosFileTransfer_FileWrapper'{the_file = H}|T]) -> - FullName = 'CosFileTransfer_File':'_get_complete_file_name'(H), - Name = 'CosFileTransfer_File':'_get_name'(H), - io:format("FULL NAME: ~p SHORT NAME: ~p~n", [FullName, Name]), - loop_files(T). - - -create_file_on_source_node('FTP', _Config, Host, FileName, Path, Data) -> - io:format("<<<<<< CosFileTransfer Testing File >>>>>>~n",[]), - io:format("Host: ~p~nPath: ~p~nFile: ~p~n", [Host, Path, FileName]), - {ok, Pid} = ?match({ok, _}, inets:start(ftpc, [{host, Host}], stand_alone)), - ?match(ok, ftp:user(Pid, ?FTP_USER, ?FTP_PASS)), - ?match(ok, ftp:cd(Pid, Path)), - ?match(ok, ftp:send_bin(Pid, list_to_binary(Data), FileName)), - ?match(ok, inets:stop(ftpc, Pid)); -create_file_on_source_node({'NATIVE', _}, _Config, Host, FileName, Path, Data) -> - io:format("<<<<<< CosFileTransfer Testing File >>>>>>~n",[]), - io:format("Host: ~p~nPath: ~p~nFile: ~p~n", [Host, Path, FileName]), - ?match(ok, file:write_file(FileName, list_to_binary(Data))). - -create_name(Type) -> - Time = erlang:system_time(), - Unique = erlang:unique_integer([positive]), - lists:concat([Type, '_', Time, '_', Unique]). - - - - -%%------------------------------------------------------------ -%% function : create_node/4 -%% Arguments: Name - the name of the new node (atom()) -%% Port - which iiop_port (integer()) -%% Domain - which domain. -%% Type - if /4 used the types defines the extra arguments -%% to be used. -%% Returns : {ok, Node} | {error, _} -%% Effect : Starts a new slave-node with given (optinally) -%% extra arguments. If fails it retries 'Retries' times. -%%------------------------------------------------------------ -create_node(Name, Port, normal) -> - Args = basic_args(Name), - create_node(Name, Port, 10, normal, Args, []); -create_node(Name, {Port, _Depth}, ssl) -> - Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]), - Args = basic_args(Name), - {ok, Node} = create_node(list_to_atom(Name), Port, 10, ssl, Args, []), - %% Client - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_client_certfile, - filename:join([Dir, "client", "cert.pem"])]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_client_cacertfile, - filename:join([Dir, "client", "cacerts.pem"])]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_client_keyfile, - filename:join([Dir, "client", "key.pem"])]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_client_verify, 1]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_client_depth, 0]), - - %% Server - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_server_certfile, - filename:join([Dir, "server", "cert.pem"])]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_server_cacertfile, - filename:join([Dir, "server", "cacerts.pem"])]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_server_keyfile, - filename:join([Dir, "server", "key.pem"])]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_server_verify, 1]), - rpc:call(Node, application, set_env, [cosFileTransfer, ssl_server_depth, 0]), - {ok, Node}. - -%create_node(Name, {Port, Depth}, ssl) -> -% TestLibs = filename:join(filename:dirname(code:which(?MODULE)), "ssl_data"), -% Args = basic_args(Name), -% SArgs = basic_ssl_args(TestLibs, Args), -% LArgs = level_based_ssl(Depth, TestLibs, SArgs), -% create_node(list_to_atom(Name), Port, 10, ssl, LArgs, [{sslpath, TestLibs}]). - -create_node(Name, Port, Retries, Type, Args, Options) -> - [_, Host] = ?match([_,_],string:tokens(atom_to_list(node()), [$@])), - case starter(Host, Name, Args) of - {ok, NewNode} -> - ?match(pong, net_adm:ping(NewNode)), - {ok, Cwd} = file:get_cwd(), - Path = code:get_path(), - ?match(ok, rpc:call(NewNode, file, set_cwd, [Cwd])), - true = rpc:call(NewNode, code, set_path, [Path]), - ?match(ok, start_orber_remote(NewNode, Type, Options, Port)), - spawn_link(NewNode, ?MODULE, slave_sup, []), - rpc:multicall([node() | nodes()], global, sync, []), - {ok, NewNode}; - {error, Reason} when Retries == 0-> - {error, Reason}; - {error, Reason} -> - io:format("Could not start slavenode ~p ~p retrying~n", - [{Host, Name, Args}, Reason]), - timer:sleep(500), - create_node(Name, Port, Retries - 1, Type, Args, Options) - end. - -starter(Host, Name, Args) -> - slave:start(Host, Name, Args). - -slave_sup() -> - process_flag(trap_exit, true), - receive - {'EXIT', _, _} -> - ignore - end. - - -%%------------------------------------------------------------ -%% function : destroy_node -%% Arguments: Node - which node to destroy. -%% Type - normal | ssl -%% Returns : -%% Effect : -%%------------------------------------------------------------ --ifdef(false). -destroy_node(Node, Type) -> - stopper(Node, Type). - -stopper(Node, Type) -> - catch stop_orber_remote(Node, Type), - slave:stop(Node). --endif. - -%%------------------------------------------------------------ -%% function : remote_apply -%% Arguments: N - Node, M - Module, -%% F - Function, A - Arguments (list) -%% Returns : -%% Effect : -%%------------------------------------------------------------ -remote_apply(N, M,F,A) -> - case rpc:call(N, M, F, A) of - {badrpc, Reason} -> - exit(Reason); - Other -> - Other - end. - -%%------------------------------------------------------------ -%% function : stop_orber_remote -%% Arguments: Node - which node to stop orber on. -%% Type - normal | ssl | light | ....... -%% Returns : ok -%% Effect : Stops orber on given node and, if specified, -%% other applications or programs. -%%------------------------------------------------------------ -stop_orber_remote(Node, ssl) -> - rpc:call(Node, ssl, stop, []), - rpc:call(Node, crypto, stop, []), - orb_rpc_blast(Node, ssl); -stop_orber_remote(Node, Type) -> - orb_rpc_blast(Node, Type). - -orb_rpc_blast(Node, _) -> - rpc:call(Node, cosFileTransferApp, stop, []), - rpc:call(Node, cosProperty, stop, []), - rpc:call(Node, cosFileTransferApp, uninstall, []), - rpc:call(Node, cosProperty, uninstall, []), - rpc:call(Node, orber, jump_stop, []). - -%%------------------------------------------------------------ -%% function : start_orber_remote -%% Arguments: Node - which node to start orber on. -%% Type - normal | ssl | light | ....... -%% Returns : ok -%% Effect : Starts orber on given node and, if specified, -%% other applications or programs. -%%------------------------------------------------------------ -start_orber_remote(Node, ssl, _Options, Port) -> - rpc:call(Node, ssl, start, []), - rpc:call(Node, crypto, start, []), - rpc:call(Node, ssl, seed, ["testing"]), - orb_rpc_setup(Node, ssl, Port); -start_orber_remote(Node, Type, _, Port) -> - orb_rpc_setup(Node, Type, Port). - -orb_rpc_setup(Node, _, Port) -> - rpc:call(Node, orber, jump_start, [Port]), - rpc:call(Node, cosProperty, install, []), - rpc:call(Node, cosProperty, start, []), - rpc:call(Node, cosFileTransferApp, install, []). - -%%--------------- MISC FUNCTIONS ----------------------------- -basic_args(_Name) -> - TestLibs = filename:dirname(code:which(?MODULE)), - " -orber orber_debug_level 10" ++ - " -pa " ++ - TestLibs ++ - " -pa " ++ - filename:join(TestLibs, "all_SUITE_data") ++ - " -pa " ++ - filename:dirname(code:which(cosFileTransferApp)). - --ifdef(false). -basic_ssl_args(TestLibs, Args) -> -% Args ++ -% " -cosFileTransfer ssl_client_certfile \\\"" ++ -% filename:join(TestLibs, "ssl_client_cert.pem") ++ -% "\\\" -cosFileTransfer ssl_server_certfile \\\""++ -% filename:join(TestLibs, "ssl_server_cert.pem")++"\\\"". - - io:format("<<<<<< SSL LIBS ~p >>>>>>~n",[TestLibs]), - NewArgs = Args ++ - " -cosFileTransfer ssl_client_certfile \\\"" ++ - filename:join(TestLibs, "ssl_client_cert.pem") ++ - "\\\" -cosFileTransfer ssl_server_certfile \\\""++ - filename:join(TestLibs, "ssl_server_cert.pem")++"\\\"", - io:format("<<<<<< SSL LIBS ARGS ~p >>>>>>~n",[NewArgs]), - NewArgs. - -level_based_ssl(1, _TestLibs, Args) -> - Args; -level_based_ssl(2, _TestLibs, Args) -> - Args.% ++ -% " -cosFileTransfer ssl_server_depth 2 " ++ -% " -cosFileTransfer ssl_client_depth 2 " ++ -% " -cosFileTransfer ssl_server_verify " ++ -% " -cosFileTransfer ssl_client_verify " ++ -% " -cosFileTransfer ssl_server_cacertfile " ++ -% " -cosFileTransfer ssl_client_cacertfile " ++ - --endif. - -install_data(Protocol, {WhichType, Host, Name}) -> - io:format("<<<<<< Starting ~p/~p VFS at ~p/~p>>>>>>~n", - [Protocol, WhichType, Host, Name]), - %% Create a Virtual File System. - VFS = ?match({_,_,_,_,_,_}, - cosFileTransferApp:create_VFS(WhichType, [], Host, ?FTP_PORT, - [{protocol, Protocol}])), - NS = corba:resolve_initial_references("NameService"), - NC1 = lname_component:set_id(lname_component:create(), Name), - N = lname:insert_component(lname:create(), 1, NC1), - 'CosNaming_NamingContext':rebind(NS, N, VFS). - -uninstall_data(Name) -> - VFS = ?match({_,_,_,_,_,_}, - corba:string_to_object("corbaname:rir:/NameService#"++Name)), - ?match(ok, corba:dispose(VFS)), - ok. - - - -%%------------------- EOF MODULE----------------------------------- |