123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- # encoding: utf-8
- require 'test_helper'
-
- class PackageTest < ActiveSupport::TestCase
- test 'packages' do
- tests = [
- # test 1 - normal install
- {
- :zpm => '<?xml version="1.0"?>
- <zpm version="1.0">
- <name>UnitTestSample</name>
- <version>1.0.1</version>
- <vendor>Znuny GmbH</vendor>
- <url>http://znuny.org/</url>
- <license>ABC</license>
- <description lang="en">some description</description>
- <filelist>
- <file permission="644" location="test.txt">YWJjw6TDtsO8w58=</file>
- <file permission="644" location="some/dir/test.txt">YWJjw6TDtsO8w58=</file>
- <file permission="644" location="db/addon/unit_test_sample/20121212000001_create_base.rb">Y2xhc3MgQ3JlYXRlQmFzZSA8IEFjdGl2ZVJlY29yZDo6TWlncmF0aW9uDQogIGRlZiBzZWxmLnVw
- DQogICBjcmVhdGVfdGFibGUgOnNhbXBsZV90YWJsZXMgZG8gfHR8DQogICAgICB0LmNvbHVtbiA6
- bmFtZSwgICAgICAgICAgIDpzdHJpbmcsIDpsaW1pdCA9PiAxNTAsICA6bnVsbCA9PiB0cnVlDQog
- ICAgICB0LmNvbHVtbiA6ZGF0YSwgICAgICAgICAgIDpzdHJpbmcsIDpsaW1pdCA9PiA1MDAwLCA6
- bnVsbCA9PiB0cnVlDQogICAgZW5kDQogIGVuZA0KDQogIGRlZiBzZWxmLmRvd24NCiAgICBkcm9w
- X3RhYmxlIDpzYW1wbGVfdGFibGVzDQogIGVuZA0KZW5k</file>
- </filelist>
- </zpm>',
- :action => 'install',
- :result => true,
- :verify => {
- :package => {
- :name => 'UnitTestSample',
- :version => '1.0.1',
- },
- :check_files => [
- {
- :location => 'test.txt',
- :result => true,
- },
- {
- :location => 'test2.txt',
- :result => false,
- },
- {
- :location => 'some/dir/test.txt',
- :result => true,
- },
- ],
- },
- },
- # test 2 - try to install same package again / should not work
- {
- :zpm => '<?xml version="1.0"?>
- <zpm version="1.0">
- <name>UnitTestSample</name>
- <version>1.0.1</version>
- <vendor>Znuny GmbH</vendor>
- <url>http://znuny.org/</url>
- <license>ABC</license>
- <description lang="en">some description</description>
- <filelist>
- <file permission="644" location="test.txt">YWJjw6TDtsO8w58=</file>
- </filelist>
- </zpm>',
- :action => 'install',
- :result => false,
- },
- # test 3 - try to install lower version / should not work
- {
- :zpm => '<?xml version="1.0"?>
- <zpm version="1.0">
- <name>UnitTestSample</name>
- <version>1.0.0</version>
- <vendor>Znuny GmbH</vendor>
- <url>http://znuny.org/</url>
- <license>ABC</license>
- <description lang="en">some description</description>
- <filelist>
- <file permission="644" location="test.txt">YWJjw6TDtsO8w58=</file>
- </filelist>
- </zpm>',
- :action => 'install',
- :result => false,
- },
- # test 4 - upgrade 7 should work
- {
- :zpm => '<?xml version="1.0"?>
- <zpm version="1.0">
- <name>UnitTestSample</name>
- <version>1.0.2</version>
- <vendor>Znuny GmbH</vendor>
- <url>http://znuny.org/</url>
- <license>ABC</license>
- <description lang="en">some description</description>
- <filelist>
- <file permission="644" location="test.txt2">YWJjw6TDtsO8w58=</file>
- <file permission="644" location="some/dir/test.txt2">YWJjw6TDtsO8w58=</file>
- <file permission="644" location="db/addon/unit_test_sample/20121212000001_create_base.rb">Y2xhc3MgQ3JlYXRlQmFzZSA8IEFjdGl2ZVJlY29yZDo6TWlncmF0aW9uDQogIGRlZiBzZWxmLnVw
- DQogICBjcmVhdGVfdGFibGUgOnNhbXBsZV90YWJsZXMgZG8gfHR8DQogICAgICB0LmNvbHVtbiA6
- bmFtZSwgICAgICAgICAgIDpzdHJpbmcsIDpsaW1pdCA9PiAxNTAsICA6bnVsbCA9PiB0cnVlDQog
- ICAgICB0LmNvbHVtbiA6ZGF0YSwgICAgICAgICAgIDpzdHJpbmcsIDpsaW1pdCA9PiA1MDAwLCA6
- bnVsbCA9PiB0cnVlDQogICAgZW5kDQogIGVuZA0KDQogIGRlZiBzZWxmLmRvd24NCiAgICBkcm9w
- X3RhYmxlIDpzYW1wbGVfdGFibGVzDQogIGVuZA0KZW5k</file>
- </filelist>
- </zpm>',
- :action => 'install',
- :result => true,
- :verify => {
- :package => {
- :name => 'UnitTestSample',
- :version => '1.0.2',
- },
- :check_files => [
- {
- :location => 'test.txt2',
- :result => true,
- },
- {
- :location => 'test.txt',
- :result => false,
- },
- {
- :location => 'test2.txt',
- :result => false,
- },
- {
- :location => 'some/dir/test.txt2',
- :result => true,
- },
- ],
- },
- },
- # test 4 - uninstall package / should work
- {
- :name => 'UnitTestSample',
- :version => '1.0.2',
- :action => 'uninstall',
- :result => true,
- :verify => {
- :check_files => [
- {
- :location => 'test.txt',
- :result => false,
- },
- {
- :location => 'test2.txt',
- :result => false,
- },
- ],
- },
- },
- # test 5 - check auto_install mechanism
- {
- :zpm => '<?xml version="1.0"?>
- <zpm version="1.0">
- <name>UnitTestSample</name>
- <version>1.0.2</version>
- <vendor>Znuny GmbH</vendor>
- <url>http://znuny.org/</url>
- <license>ABC</license>
- <description lang="en">some description</description>
- <filelist>
- <file permission="644" location="test.txt2">YWJjw6TDtsO8w58=</file>
- <file permission="644" location="some/dir/test.txt2">YWJjw6TDtsO8w58=</file>
- <file permission="644" location="db/addon/unit_test_sample/20121212000001_create_base.rb">Y2xhc3MgQ3JlYXRlQmFzZSA8IEFjdGl2ZVJlY29yZDo6TWlncmF0aW9uDQogIGRlZiBzZWxmLnVw
- DQogICBjcmVhdGVfdGFibGUgOnNhbXBsZV90YWJsZXMgZG8gfHR8DQogICAgICB0LmNvbHVtbiA6
- bmFtZSwgICAgICAgICAgIDpzdHJpbmcsIDpsaW1pdCA9PiAxNTAsICA6bnVsbCA9PiB0cnVlDQog
- ICAgICB0LmNvbHVtbiA6ZGF0YSwgICAgICAgICAgIDpzdHJpbmcsIDpsaW1pdCA9PiA1MDAwLCA6
- bnVsbCA9PiB0cnVlDQogICAgZW5kDQogIGVuZA0KDQogIGRlZiBzZWxmLmRvd24NCiAgICBkcm9w
- X3RhYmxlIDpzYW1wbGVfdGFibGVzDQogIGVuZA0KZW5k</file>
- </filelist>
- </zpm>',
- :action => 'auto_install',
- :result => true,
- :verify => {
- :package => {
- :name => 'UnitTestSample',
- :version => '1.0.2',
- },
- :check_files => [
- {
- :location => 'test.txt2',
- :result => true,
- },
- {
- :location => 'test.txt',
- :result => false,
- },
- {
- :location => 'test2.txt',
- :result => false,
- },
- {
- :location => 'some/dir/test.txt2',
- :result => true,
- },
- ],
- },
- },
- # test 6 - check uninstall / should work
- {
- :name => 'UnitTestSample',
- :version => '1.0.2',
- :action => 'uninstall',
- :result => true,
- :verify => {
- :check_files => [
- {
- :location => 'test.txt',
- :result => false,
- },
- {
- :location => 'test2.txt',
- :result => false,
- },
- ],
- },
- },
- ]
- tests.each { |test|
- if test[:action] == 'install'
- begin
- success = Package.install( :string => test[:zpm] )
- rescue => e
- puts 'ERROR: ' + e.inspect
- success = false
- end
- if test[:result]
- assert( success, "install package not successful" )
- else
- assert( !success, "install package successful but should not" )
- end
- elsif test[:action] == 'uninstall'
- if test[:zpm]
- begin
- success = Package.uninstall( :string => test[:zpm] )
- rescue
- success = false
- end
- else
- begin
- success = Package.uninstall( :name => test[:name], :version => test[:version] )
- rescue
- success = false
- end
- end
- if test[:result]
- assert( success, "uninstall package not successful" )
- else
- assert( !success, "uninstall package successful but should not" )
- end
- elsif test[:action] == 'auto_install'
- if test[:zpm]
- if !File.exist?( Rails.root.to_s + '/auto_install/' )
- Dir.mkdir( Rails.root.to_s + '/auto_install/', 0755)
- end
- location = Rails.root.to_s + '/auto_install/unittest.zpm'
- file = File.new( location, 'wb' )
- file.write( test[:zpm] )
- file.close
- end
- begin
- success = Package.auto_install()
- rescue
- success = false
- end
- if test[:zpm]
- File.delete( location )
- end
- end
- if test[:verify] && test[:verify][:package]
- exists = Package.where( :name => test[:verify][:package][:name], :version => test[:verify][:package][:version] ).first
- assert( exists, "package '#{test[:verify][:package][:name]}' is not installed" )
- end
- if test[:verify] && test[:verify][:check_files]
- test[:verify][:check_files].each {|item|
- exists = File.exist?( item[:location] )
- if item[:result]
- assert( exists, "'#{item[:location]}' exists" )
- else
- assert( !exists, "'#{item[:location]}' doesn't exists" )
- end
- }
- end
- }
- end
- end
|