1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | -module(migration_SUITE). -compile(export_all). -include_lib("common_test/include/ct.hrl"). % Require the following tags before executing the suite. % The tags are provided by a config file suite() -> [{require, hidenets}, {require, demo}, {require, node1}, {require, node2}, {require, testserver}]. init_per_suite(Config) -> % Start ssh connections {ok, Hidenets} = ct_ssh:connect(hidenets), {ok, Demo} = ct_ssh:connect(demo), {ok, Node1} = ct_ssh:connect(node1), {ok, Node2} = ct_ssh:connect(node2), {ok, Testserver} = ct_ssh:connect(testserver), % Append handles to config % OBS: This is not actually used, because of the disconnect issue [{ssh_handles,{Hidenets,Demo,Node1,Node2,Testserver}} | Config]. end_per_suite(Config) -> % Disconnect from all handles Handles = erlang:tuple_to_list(?config(ssh_handles, Config)), lists:foreach(fun(Handle) -> ct_ssh:disconnect(Handle) end, Handles). init_per_group(_GroupName, Config) -> % Get ssh handles from config % {Hidenets, Demo, Node1, Node2, Testserver} = ?config(ssh_handles, Config), % Start context agent on hidenets (simple console application) runcmd(hidenets, "./ContextAgentLinux/ContextAgent"), % Start GUI macro playback runcmd(hidenets, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee.xns"), runcmd(demo, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee.xns"), runcmd(node1, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee.xns"), runcmd(node2, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee.xns"), Config. end_per_group(_GroupName, Config) -> % Get ssh handles from config % {Hidenets, Demo, Node1, Node2, Testserver} = ?config(ssh_handles, Config), % Stop GUY macro playback runcmd(hidenets, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee-end.xns"), runcmd(demo, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee-end.xns"), runcmd(node1, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee-end.xns"), runcmd(node2, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee-end.xns"), % Stop context agent on hidenets runcmd(hidenets, "pkill Context"), ok. % Initialize the testcase init_per_testcase(_TestCase, Config) -> Config. % Execute the following after a test case is finished end_per_testcase(_TestCase, Config) -> ok. groups() -> [{migrateTest, [sequence], [migCase1, migCase2]}]. all() -> % Return a list of all test cases in the suite. [migrateTest]. migCase1() -> []. migCase2() -> []. migCase1(Config) -> %Hidenets = element(1, ?config(ssh_handles,Config)), % Arbitrary delay to ensure eclipse + CA is started up and running ok = timer:sleep(5000), % Trigger runcmd(hidenets, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee-triggerzero.xns"), ok = timer:sleep(5000), ok. migCase2(Config) -> % Hidenets = element(1, ?config(ssh_handles,Config)), % Arbitrary delay to ensure eclipse + CA is started up and running ok = timer:sleep(5000), % Trigger runcmd(hidenets, "export DISPLAY=:0.0 && cnee --replay -f ~/ct/xnee/xnee-triggerone.xns"), ok = timer:sleep(5000), ok. %%%%% HELPER FUNCTIONS %%%%%%%%% runcmd(HandleCfg, Cmd) -> case ct_ssh:connect(HandleCfg) of {ok, Handle} -> case ct_ssh:exec(Handle, Cmd, 3000) of {ok, Data} -> ok; {error, _} -> runcmd(HandleCfg, Cmd); {_, _} -> ok end; {error, _} -> runcmd(HandleCfg, Cmd); _ -> runcmd(HandleCfg, Cmd) end. |
LW1vZHVsZShtaWdyYXRpb25fU1VJVEUpLgotY29tcGlsZShleHBvcnRfYWxsKS4KLWluY2x1ZGVfbGliKCJjb21tb25fdGVzdC9pbmNsdWRlL2N0LmhybCIpLgoKJSBSZXF1aXJlIHRoZSBmb2xsb3dpbmcgdGFncyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBzdWl0ZS4KJSBUaGUgdGFncyBhcmUgcHJvdmlkZWQgYnkgYSBjb25maWcgZmlsZQpzdWl0ZSgpIC0+CiAgICBbe3JlcXVpcmUsIGhpZGVuZXRzfSwKICAgICB7cmVxdWlyZSwgZGVtb30sCiAgICAge3JlcXVpcmUsIG5vZGUxfSwKICAgICB7cmVxdWlyZSwgbm9kZTJ9LAogICAgIHtyZXF1aXJlLCB0ZXN0c2VydmVyfV0uCgppbml0X3Blcl9zdWl0ZShDb25maWcpIC0+CgklIFN0YXJ0IHNzaCBjb25uZWN0aW9ucwoJe29rLCBIaWRlbmV0c30gPSBjdF9zc2g6Y29ubmVjdChoaWRlbmV0cyksCgl7b2ssIERlbW99ID0gY3Rfc3NoOmNvbm5lY3QoZGVtbyksCgl7b2ssIE5vZGUxfSA9IGN0X3NzaDpjb25uZWN0KG5vZGUxKSwKCXtvaywgTm9kZTJ9ID0gY3Rfc3NoOmNvbm5lY3Qobm9kZTIpLAoJe29rLCBUZXN0c2VydmVyfSA9IGN0X3NzaDpjb25uZWN0KHRlc3RzZXJ2ZXIpLAoKCSUgQXBwZW5kIGhhbmRsZXMgdG8gY29uZmlnCgklIE9CUzogVGhpcyBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYmVjYXVzZSBvZiB0aGUgZGlzY29ubmVjdCBpc3N1ZQoJW3tzc2hfaGFuZGxlcyx7SGlkZW5ldHMsRGVtbyxOb2RlMSxOb2RlMixUZXN0c2VydmVyfX0gfCBDb25maWddLgoJCmVuZF9wZXJfc3VpdGUoQ29uZmlnKSAtPgoJJSBEaXNjb25uZWN0IGZyb20gYWxsIGhhbmRsZXMKCUhhbmRsZXMgPSBlcmxhbmc6dHVwbGVfdG9fbGlzdCg/Y29uZmlnKHNzaF9oYW5kbGVzLCBDb25maWcpKSwKCWxpc3RzOmZvcmVhY2goZnVuKEhhbmRsZSkgLT4gY3Rfc3NoOmRpc2Nvbm5lY3QoSGFuZGxlKSBlbmQsCgkJCQlIYW5kbGVzKS4KCmluaXRfcGVyX2dyb3VwKF9Hcm91cE5hbWUsIENvbmZpZykgLT4KCSUgR2V0IHNzaCBoYW5kbGVzIGZyb20gY29uZmlnCgklIHtIaWRlbmV0cywgRGVtbywgTm9kZTEsIE5vZGUyLCBUZXN0c2VydmVyfSA9ID9jb25maWcoc3NoX2hhbmRsZXMsIENvbmZpZyksCgoJJSBTdGFydCBjb250ZXh0IGFnZW50IG9uIGhpZGVuZXRzIChzaW1wbGUgY29uc29sZSBhcHBsaWNhdGlvbikKCXJ1bmNtZChoaWRlbmV0cywgIi4vQ29udGV4dEFnZW50TGludXgvQ29udGV4dEFnZW50IiksCgoJJSBTdGFydCBHVUkgbWFjcm8gcGxheWJhY2sKICAgICAgICBydW5jbWQoaGlkZW5ldHMsICJleHBvcnQgRElTUExBWT06MC4wICYmIGNuZWUgLS1yZXBsYXkgLWYgfi9jdC94bmVlL3huZWUueG5zIiksCiAgICAgICAgcnVuY21kKGRlbW8sICJleHBvcnQgRElTUExBWT06MC4wICYmIGNuZWUgLS1yZXBsYXkgLWYgfi9jdC94bmVlL3huZWUueG5zIiksCiAgICAgICAgcnVuY21kKG5vZGUxLCAiZXhwb3J0IERJU1BMQVk9OjAuMCAmJiBjbmVlIC0tcmVwbGF5IC1mIH4vY3QveG5lZS94bmVlLnhucyIpLAogICAgICAgIHJ1bmNtZChub2RlMiwgImV4cG9ydCBESVNQTEFZPTowLjAgJiYgY25lZSAtLXJlcGxheSAtZiB+L2N0L3huZWUveG5lZS54bnMiKSwKCUNvbmZpZy4KCgplbmRfcGVyX2dyb3VwKF9Hcm91cE5hbWUsIENvbmZpZykgLT4KCSUgR2V0IHNzaCBoYW5kbGVzIGZyb20gY29uZmlnCgklIHtIaWRlbmV0cywgRGVtbywgTm9kZTEsIE5vZGUyLCBUZXN0c2VydmVyfSA9ID9jb25maWcoc3NoX2hhbmRsZXMsIENvbmZpZyksCgoJJSBTdG9wIEdVWSBtYWNybyBwbGF5YmFjawoJcnVuY21kKGhpZGVuZXRzLCAiZXhwb3J0IERJU1BMQVk9OjAuMCAmJiBjbmVlIC0tcmVwbGF5IC1mIH4vY3QveG5lZS94bmVlLWVuZC54bnMiKSwKICAgICAgICBydW5jbWQoZGVtbywgImV4cG9ydCBESVNQTEFZPTowLjAgJiYgY25lZSAtLXJlcGxheSAtZiB+L2N0L3huZWUveG5lZS1lbmQueG5zIiksCiAgICAgICAgcnVuY21kKG5vZGUxLCAiZXhwb3J0IERJU1BMQVk9OjAuMCAmJiBjbmVlIC0tcmVwbGF5IC1mIH4vY3QveG5lZS94bmVlLWVuZC54bnMiKSwKICAgICAgICBydW5jbWQobm9kZTIsICJleHBvcnQgRElTUExBWT06MC4wICYmIGNuZWUgLS1yZXBsYXkgLWYgfi9jdC94bmVlL3huZWUtZW5kLnhucyIpLAoKCSUgU3RvcCBjb250ZXh0IGFnZW50IG9uIGhpZGVuZXRzCglydW5jbWQoaGlkZW5ldHMsICJwa2lsbCBDb250ZXh0IiksCglvay4KCiUgSW5pdGlhbGl6ZSB0aGUgdGVzdGNhc2UKaW5pdF9wZXJfdGVzdGNhc2UoX1Rlc3RDYXNlLCBDb25maWcpIC0+CglDb25maWcuCgolIEV4ZWN1dGUgdGhlIGZvbGxvd2luZyBhZnRlciBhIHRlc3QgY2FzZSBpcyBmaW5pc2hlZAplbmRfcGVyX3Rlc3RjYXNlKF9UZXN0Q2FzZSwgQ29uZmlnKSAtPgoJb2suCgpncm91cHMoKSAtPgoJW3ttaWdyYXRlVGVzdCwgW3NlcXVlbmNlXSwgW21pZ0Nhc2UxLCBtaWdDYXNlMl19XS4KCmFsbCgpIC0+CgklIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRlc3QgY2FzZXMgaW4gdGhlIHN1aXRlLgoJW21pZ3JhdGVUZXN0XS4KCm1pZ0Nhc2UxKCkgLT4KCVtdLgoKbWlnQ2FzZTIoKSAtPgoJW10uCgptaWdDYXNlMShDb25maWcpIC0+CgkJJUhpZGVuZXRzID0gZWxlbWVudCgxLCA/Y29uZmlnKHNzaF9oYW5kbGVzLENvbmZpZykpLAoKCQklIEFyYml0cmFyeSBkZWxheSB0byBlbnN1cmUgZWNsaXBzZSArIENBIGlzIHN0YXJ0ZWQgdXAgYW5kIHJ1bm5pbmcKCQlvayA9IHRpbWVyOnNsZWVwKDUwMDApLAoKCQklIFRyaWdnZXIKCQlydW5jbWQoaGlkZW5ldHMsICJleHBvcnQgRElTUExBWT06MC4wICYmIGNuZWUgLS1yZXBsYXkgLWYgfi9jdC94bmVlL3huZWUtdHJpZ2dlcnplcm8ueG5zIiksCgkJb2sgPSB0aW1lcjpzbGVlcCg1MDAwKSwKCQlvay4KCm1pZ0Nhc2UyKENvbmZpZykgLT4KCQklIEhpZGVuZXRzID0gZWxlbWVudCgxLCA/Y29uZmlnKHNzaF9oYW5kbGVzLENvbmZpZykpLAoJCSUgQXJiaXRyYXJ5IGRlbGF5IHRvIGVuc3VyZSBlY2xpcHNlICsgQ0EgaXMgc3RhcnRlZCB1cCBhbmQgcnVubmluZwogICAgICAgICAgICAgICAgb2sgPSB0aW1lcjpzbGVlcCg1MDAwKSwKCgkJJSBUcmlnZ2VyCgkJcnVuY21kKGhpZGVuZXRzLCAiZXhwb3J0IERJU1BMQVk9OjAuMCAmJiBjbmVlIC0tcmVwbGF5IC1mIH4vY3QveG5lZS94bmVlLXRyaWdnZXJvbmUueG5zIiksCgkJb2sgPSB0aW1lcjpzbGVlcCg1MDAwKSwKCQlvay4KCgolJSUlJSBIRUxQRVIgRlVOQ1RJT05TICUlJSUlJSUlJQpydW5jbWQoSGFuZGxlQ2ZnLCBDbWQpIC0+CgljYXNlIGN0X3NzaDpjb25uZWN0KEhhbmRsZUNmZykgb2YKCQl7b2ssIEhhbmRsZX0gLT4KCQkJY2FzZSBjdF9zc2g6ZXhlYyhIYW5kbGUsIENtZCwgMzAwMCkgb2YKCQkJe29rLCBEYXRhfSAtPiBvazsKCQkJe2Vycm9yLCBffSAtPiBydW5jbWQoSGFuZGxlQ2ZnLCBDbWQpOwoJCQl7XywgX30gLT4gb2sKCQkJZW5kOwoJCXtlcnJvciwgX30gLT4KCQkJcnVuY21kKEhhbmRsZUNmZywgQ21kKTsKCQlfIC0+CgkJCXJ1bmNtZChIYW5kbGVDZmcsIENtZCkKCWVuZC4=


