merged cont.
[opensuse:yast-rest-service.git] / webservice / doc / check-setup.rb
1 #!/usr/bin/env ruby
2 #--
3 # Webyast Webservice framework
4 #
5 # Copyright (C) 2009, 2010 Novell, Inc. 
6 #   This library is free software; you can redistribute it and/or modify
7 # it only under the terms of version 2.1 of the GNU Lesser General Public
8 # License as published by the Free Software Foundation. 
9 #
10 #   This library is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
13 # details. 
14 #
15 #   You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software 
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #++
19
20 #
21 # check-setup.rb
22 #
23 # Tests correct setup of webclient
24 #
25
26 $production_errors = 0
27 $development_errors = 0
28
29 ###
30 # Helpers
31 #
32
33 def escape severity, why, fix = nil
34   $stderr.puts "*** %s error: %s" % [ severity.to_s.capitalize, why ]
35   $stderr.puts "\tPlease #{fix}" if fix
36   case severity
37     when :production: $production_errors += 1
38     when :development: $development_errors += 1
39     when :generic: exit
40   end
41 end
42
43 def test what
44   escape "(internal error) wrong use of 'test'" unless block_given?
45   puts "Testing if #{what}"
46   yield
47 end
48
49 def test_module severity, name, package
50   print "#{name} ... "
51   begin
52     require name
53   rescue Exception => e
54     puts "no"
55     escape severity, "#{name} not available", "install #{package}"
56   else
57     puts "ok"
58   end
59 end
60
61 #
62 # test if package is installed
63 # return value
64 #  if package not installed: nil
65 #  else version string
66 #
67 def test_package severity, package
68   v = `rpm -q #{package}` # RORSCAN_ITL
69   return nil if v =~ /is not installed/
70   nvr = v.split("-") # split name-version-release
71   escape(severity, "can't extract version from #{v}", "check your installation") unless nvr.size > 2
72   nvr.pop
73   nvr.pop
74 end
75
76 #
77 # test if package is installed with minimum version
78 #
79 def test_version severity, package, version = nil
80   ver = test_package severity, package
81   escape(severity, "#{package} not installed", "install #{package}") unless ver
82   escape(severity, "#{package} not up-to-date", "upgrade to #{package}-#{version}") if version && ver < version
83   true
84 end
85
86 def test_group severity, name
87   require 'etc'
88   begin
89     Etc.getgrnam name
90   rescue ArgumentError
91     escape severity, "Group '#{name}' does not exist", "run 'groupadd -r #{name}' as root"
92   end
93 end
94
95 def test_user severity, name
96   require 'etc'
97   begin
98     Etc.getpwnam name
99   rescue ArgumentError
100     escape severity, "User '#{name}' does not exist", "run 'useradd  -g #{name} -s /bin/false -r -c \"User for WebYaST-Service\" -d /var/lib/#{name} #{name}' as root"
101   end
102 end
103
104 def test_policy policy, user
105 end
106
107 ###
108 # Tests
109 #
110
111 #
112 # runtime environment
113 #
114
115 test_module :generic, 'rubygems', 'rubygems'
116 test_module :generic, 'gettext', 'rubygem-gettext_rails'
117 test_module :generic, 'dbus', 'ruby-dbus'
118 test_version :generic, 'sqlite3'
119 test_module :generic, 'sqlite3', 'rubygem-sqlite3'
120 test_version :generic, 'yast2-dbus-server'
121
122 test_module :generic, 'rpam', 'rubygem-rpam'
123 test_module :generic, 'polkit', 'rubygem-polkit'
124
125 test_group :production, 'yastws'
126 test_user :production, 'yastws'
127
128
129 #
130 # development environment
131 #
132
133 # Doesn't work, test/unit throws error:
134 # test_module :development, 'test/unit', 'rubygem-test-unit'
135
136 test_version :development, 'rubygem-test-unit'
137 test_module :development, 'mocha', 'rubygem-mocha'
138 test_version :development, 'rubygem-test-unit'
139 test_module :development, 'rcov', 'rubygem-rcov'
140 test_module :development, 'nokogiri', 'rubygem-nokogiri'
141 test_module :development, 'tidy', 'rubygem-tidy'
142 test_version :development, 'tidy'
143
144 test_policy "org.opensuse.yast.system.status.read", Etc.getlogin # RORSCAN_ITL
145
146 # reqd for Users mgmt
147 test_policy "org.opensuse.yast.modules.yapi.users.groupsget", Etc.getlogin
148
149 puts "Cannot run in production" if $production_errors > 0
150 puts "Cannot run in development" if $development_errors > 0
151   
152 puts "All fine, webservice is ready to run" if $production_errors + $development_errors == 0