Sanitize SCR args better
[opensuse:yast-rest-service.git] / webservice / test / functional / scr_test.rb
1 #
2 # test/functional/scr_test.rb
3 #
4 # This tests lib/scr, the Scr proxy for YaST D-Bus
5 #
6 require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
7
8 class ScrTest < ActiveSupport::TestCase
9
10   require "scr"
11   
12   SERVICE = "org.opensuse.yast.SCR"
13   PATH = "/SCR"
14   INTERFACE = "#{SERVICE}.Methods"
15   
16   def setup
17     # stub D-Bus/SCR, see lib/scr.rb
18     @scr_proxy = DBus::ProxyObject.new(DBus::SystemBus.instance, SERVICE, PATH)
19     @scr_iface = DBus::ProxyObjectInterface.new(@scr_proxy, SERVICE)
20     # must stub class method here, 'Singleton' seems to prevent instance stubbing ?!
21     @scr_iface.class.any_instance.stubs(:Write).returns(true)
22     @scr_iface.class.any_instance.stubs(:Read).returns([["","",""]])
23     @scr_iface.class.any_instance.stubs(:Execute).returns([[nil,nil,{"exit"=>[0,0,0],"stdout"=>["","",""], "stderr"=>["","",""]}]])
24     
25     @scr_proxy[INTERFACE] = @scr_iface
26     DBus::SystemBus.any_instance.stubs(:introspect).with(SERVICE,PATH).returns(@scr_proxy)
27   end
28   
29   test "instanciating the scr singleton" do
30     assert Scr.instance
31   end
32
33   test "scr read" do
34     assert Scr.instance.read ".target.tmpdir"
35   end
36
37   test "scr read with argument" do
38     Scr.instance.read(".target.string", __FILE__)
39   end
40
41   test "scr execute with good args" do
42     res = Scr.instance.execute ["ABCabc123", "_", "-", "/", "=", ":", ".", "\"", "<", ">", " ", "_-/=:.,\"<> ", "" ]
43     assert res[:exit] != 2
44   end
45   
46   test "scr execute with bad args" do
47     res = Scr.instance.execute ["|"]
48     assert_equal 2, res[:exit]
49     res = Scr.instance.execute ["/bin/date | ls /"]
50     assert_equal 2, res[:exit]
51     res = Scr.instance.execute ["ls $foo"]
52     assert_equal 2, res[:exit]
53     res = Scr.instance.execute ["%"]
54     assert_equal 2, res[:exit]
55     res = Scr.instance.execute ["@"]
56     assert_equal 2, res[:exit]
57     res = Scr.instance.execute ["foo & bar"]
58     assert_equal 2, res[:exit]
59     res = Scr.instance.execute ["cd (foo)"]
60     assert_equal 2, res[:exit]
61     res = Scr.instance.execute ["ls *?"]
62     assert_equal 2, res[:exit]
63     res = Scr.instance.execute ["'foo'"]
64     assert_equal 2, res[:exit]
65   end
66   
67   test "scr write" do
68     scr = Scr.instance
69     
70     # try to write to a temporary file
71     tmpdir = scr.read( ".target.tmpdir" );
72     assert tmpdir
73     s = Process.pid.to_s
74     f = "#{tmpdir}/#{s}" # a temp file
75 # Hmm, PolicyKit prevents testing 'write'
76 #    scr.write(".target.string", f, s)
77 #    assert scr.read(".target.string", f) == s
78     scr.execute(["/bin/rm", f])
79     # Uh-oh
80     assert scr.read(".target.stat", f).to_s.empty?
81   end
82   
83   test "scr execute" do
84     assert Scr.instance.execute(["/bin/date"])
85   end
86 end