yus 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NzBiN2NhYjE5MzU5YzAxZDZmZDk1MzI4OTE0YmIwYmUxOWQ5ZmNlOQ==
5
+ data.tar.gz: !binary |-
6
+ YjNiNThjNmY0ZjYxZWE2YTg1MzkyYThmYmQ1YzczYzBjYTg1MjQ0OQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MzhlMzYxYzUyYzY2NzAyYjg1MWZjMzNiYmNhODQ2MWQyZThkYjBkZDdkNDgx
10
+ OWMzOTM0MjFiOTY3YjkxMzA4MzIwNzExNWIwMWFiNjk5OWE0NjJjZmI4MGU5
11
+ MmU0M2M1NDk2YzYxYzliOWY4YmIyZTBjYTJhYTBlYjVmNWQyMGE=
12
+ data.tar.gz: !binary |-
13
+ YTFmODdiNjkwNzcyZjViYTc1NjQzMmZhYjQyNDAyNTE0NjgyYTFjMThjNzdk
14
+ YThkYmJlZjQxZDBmOTQ2ZGMwZTRmZDQyY2ViMmIxYjhlOTYwMzk2YmQ5ODM5
15
+ MzMzM2QyNzA1MGZiOWQyMDk1YjZiYmE3YmVmYjFjNTI2ZDM0NDQ=
data/Guide.txt CHANGED
@@ -3,64 +3,73 @@
3
3
  If you want to know why this software exists, please read the README file of
4
4
  ch.oddb.org at scm.ywesee.com
5
5
 
6
- yus is only running on Ruby1.8
6
+ yus is only running under Ruby1.8 (Ruby 1.9 and 2.0 have problems in the gem needle which calls Threads.critical=)
7
7
 
8
- If you do not yet have a private key you will have to create one with
9
-
10
- ssh-keygen -t rsa
11
-
12
- do _not_ set a password for the key otherwise yus-server will always
13
- ask you for a password at startup-time. The password you set will be
14
- with the sha256.rb.
8
+ You must have a working installation of Ruby 1.8 and git.
15
9
 
16
- Install the following packages with gem:
10
+ git clone https://github.com/zdavatz/yus.git
11
+ cd yus
12
+ gem install bundler # unless you already have bundler installed
13
+ bundle install
14
+ bundle exec rake gem_install
17
15
 
18
- needle (1.3.0)
19
- pg (0.9.0)
20
- postgres (0.7.9.2008.01.28)
16
+ # Setup the necessary configuration files. In this example we use
17
+ # user_tom as username and domain.com as the domain-name.
18
+ # He must be reachable by email via user_tom@domain.com
19
+ # Please adapt this to your need!
21
20
 
22
- Install from source
21
+ sudo mkdir -p /etc/yus/data/
23
22
 
24
- ruby-password (0.5.3)
23
+ If you do not yet have a private key you will have to create one with
25
24
 
26
- Make sure you got the directory
25
+ ssh-keygen -t rsa -f /etc/yus/user_tom
27
26
 
28
- /etc/yus/
29
- /etc/yus/data/
27
+ do _not_ set a password for the key otherwise yus-server will always
28
+ ask you for a password at startup-time. You will set a password later
29
+ using sha256.rb.
30
30
 
31
- with the files
31
+ ssh-keygen should have created the following two files
32
+ /etc/yus/data/user_tom.pub
33
+ /etc/yus/data/user_tom
32
34
 
33
- /etc/yus/data/yus.crt
34
- /etc/yus/data/yus.key
35
+ Create the file /etc/yus/data/user_tom.crt, by calling
35
36
 
36
- and also
37
+ openssl req -key /etc/yus/data/user_tom -out /etc/yus/data/user_tom.crt -new -x509 -batch -passin pass:''
37
38
 
38
- /etc/yus/yus.yml
39
+ Determine the SHA256 value of the root_pass (password for the yus root user, in this example hatakeyama). We
40
+ use the sha256.rb which is in the root of the yus checkout.
39
41
 
40
- the content of the yaml-file should be
42
+ ruby sha256.rb hatakeyama
43
+
44
+ Create the file /etc/yus/yus.yml with the following content (using the output of the previous command)
41
45
 
42
- ---
43
- root_name: email@domain.com
44
- root_pass: 7322we3asalkasdfkjl9234kjljasd234234ljsdlfkasjw23235lajsdfwr3scv [the SHA2-hash of your password]
46
+ ---
47
+ root_name: user_tom@domain.com
48
+ root_pass: 48714061119f3bb753a0c63dd4230f641ab79e58eb603fc263925c53580acdf1 # [the SHA2-hash of your password]
45
49
  log_level: DEBUG
46
- ssl_key: /etc/yus/data/yus.key [path to an rsa private key]
47
- ssl_cert: /etc/yus/data/yus.crt [path to a ssl x509 certificate]
50
+ ssl_key: /etc/yus/data/user_tom # [path to an rsa private key]
51
+ ssl_cert: /etc/yus/data/user_tom.crt # [path to a ssl x509 certificate]
48
52
  session_timeout: 3600
49
53
 
50
- To create root_pass do
54
+ Setup the PostgresDB like this
55
+
56
+ sudo -iHu postgres
57
+ psql -c "create user yus with password 'hatakeyama';"
58
+ psql -c "create database yus with encoding 'utf-8' template template0;"
59
+ psql -c "grant all privileges on database yus to yus";
60
+ exit
61
+
62
+ Verify that you have a line in you postgres /etc/postgresql-<veryion>/pg_hba.conf like the following
63
+ local all all trust
51
64
 
52
- == Contents of the file
65
+ If not you will get errors like this 'FATAL: Peer authentication failed for user "yus" (DBI::OperationalError)' while verifying
66
+ that you can connect to your new postgres database yus as user yus. When asked for the password answer with hatakeyama
53
67
 
54
- cat sha256.rb
55
- require 'digest/sha2'
56
- print "password: ", ARGV[0], "\n"
57
- print "SHA256 encoding: ",Digest::SHA256.hexdigest(ARGV[0]),"\n"
68
+ psql --user=yus --host=localhost --password yus -c '\dT'
58
69
 
59
- == For better understanding
70
+ Now you should be able to start the yus-daemon
60
71
 
61
- ruby sha256.rb hatakeyama [sha256.rb is in the source you can use that].
62
- password: hatakeyama
63
- SHA256 encoding: 48714061119f3bb753a0c63dd4230f641ab79e58eb603fc263925c53580acdf1
72
+ bin/yusd &
64
73
 
65
74
  == Note
66
75
 
@@ -74,20 +83,13 @@ To create root_pass do
74
83
  starts. root_pass and ssl_key are independent from each other. The password does
75
84
  not have to be the same.
76
85
 
77
- Then you should paste the enconding password in 'root-pass' of
78
-
79
- /etc/yus/yus.yml
80
-
81
- for the yus server setup. When you start the yus server or you use yus admin
82
- commands, the server asks you for the password.
86
+ Create a new user with
83
87
 
84
- for id_rsa.crt
85
-
86
- * openssl req -new -x509 -key .ssh/id_rsa -out .ssh/id_rsa.crt
88
+ yus_add_user user_tom@domain.com login org.oddb.RootUser
87
89
 
88
- Create a new user with
90
+ Verify that everthings is okay by calling
89
91
 
90
- yus_add_user email@domain.com login org.oddb.RootUser
92
+ yus_show user_tom@domain.com
91
93
 
92
94
  == NOTE
93
95
 
@@ -108,12 +110,8 @@ Create a new user with
108
110
  > end
109
111
  > }
110
112
  > end
111
-
112
- If you create a new user you have to make sure that
113
-
114
- bin/yusd
115
-
116
- is running. Then you have to grant
113
+
114
+ Then you have to grant
117
115
 
118
116
  yus_grant zdavatz@ywesee.com edit yus.entities
119
117
 
@@ -158,28 +156,17 @@ For installing extensive user privileges for ch.oddb.org you need to do the foll
158
156
  > become gray. The other box can be checked, but
159
157
  > as a default of RootUser, the three privileges are checked.
160
158
 
161
- To run the tests you are gonna need
162
-
163
- flexmock (0.8.6)
164
-
165
- == IMPORTANT
159
+ To run the tests you call
166
160
 
167
- emerge: ruby-dbi (0.4.3), pg (0.12.2), dbd-pg (0.3.9)
168
-
169
- also see: http://dev.ywesee.com/wiki.php/Michal/DayTwo#dbi
161
+ bundle install
162
+ bundle exec rake test
170
163
 
171
- gem install deprecated (2.0.1)
172
- gem install odba
164
+ == The setup is explained by
173
165
 
174
- == SETUP POSTGRES DB
175
-
176
- su - postgres
177
- createuser yus
178
- createdb yus
179
- exit
180
- cd [yus-git-reposito]
181
- ruby bin/yusd
166
+ * Masa in http://dev.ywesee.com/wiki.php/Masa/20101019-debug-importGkv#SetYus
167
+ * Michal in http://dev.ywesee.com/wiki.php/Michal/DayTwo#dbi
168
+ * Niklaus using a vagrant/puppet setup. See https://github.com/ngiger/vagrant-oddb_org
182
169
 
183
- == MASA setup
170
+ There exists a template to create the files under /etc/yus. Have a look at
184
171
 
185
- * http://dev.ywesee.com/wiki.php/Masa/20101019-debug-importGkv#SetYus
172
+ * https://github.com/ngiger/vagrant-oddb_org/blob/master/static-modules/oddb_org/templates/yus_grant_user.rb.erb
data/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ === 1.0.2 / 01.10.2014
2
+
3
+ * Added bin/yus_dump to dump yus-database into data/yus_dump.yml
4
+ * Added concerned user and result when logging allowed?
5
+ * Improved unit-tests
6
+ * Made travis-ci pass for 1.8.7 and 2.1.2
7
+
1
8
  === 1.0.1 / 18.06.2013
2
9
 
3
10
  * Rename pg driver name to Pg
data/bin/yus_add_user CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  $: << File.expand_path('../lib', File.dirname(__FILE__))
4
4
 
5
+ require 'rubygems' if RUBY_VERSION.match('1.8.6')
5
6
  require 'drb'
6
7
  require 'drb/ssl'
7
8
  require 'password'
data/bin/yus_delete_user CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  $: << File.expand_path('../lib', File.dirname(__FILE__))
4
4
 
5
+ require 'rubygems' if RUBY_VERSION.match('1.8.6')
5
6
  require 'drb'
6
7
  require 'drb/ssl'
7
8
  require 'password'
data/bin/yus_grant CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  $: << File.expand_path('../lib', File.dirname(__FILE__))
4
4
 
5
+ require 'rubygems' if RUBY_VERSION.match('1.8.6')
5
6
  require 'drb'
6
7
  require 'drb/ssl'
7
8
  require 'password'
data/bin/yus_passwd CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  $: << File.expand_path('../lib', File.dirname(__FILE__))
4
4
 
5
+ require 'rubygems' if RUBY_VERSION.match('1.8.6')
5
6
  require 'drb'
6
7
  require 'drb/ssl'
7
8
  require 'password'
data/bin/yus_show CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  $: << File.expand_path('../lib', File.dirname(__FILE__))
4
4
 
5
+ require 'rubygems' if RUBY_VERSION.match('1.8.6')
5
6
  require 'drb'
6
7
  require 'drb/ssl'
7
8
  require 'password'
data/bin/yusd CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  $: << File.expand_path('../lib', File.dirname(__FILE__))
4
4
 
5
+ require 'rubygems' if RUBY_VERSION.match('1.8.6')
5
6
  require 'rclconf'
6
7
  require 'logger'
7
8
  require 'drb'
data/lib/yus/server.rb CHANGED
@@ -6,7 +6,7 @@ require 'yus/entity'
6
6
  require 'yus/session'
7
7
  require 'needle'
8
8
 
9
- VERSION = '1.0.1'
9
+ VERSION = '1.0.2'
10
10
 
11
11
  module Yus
12
12
  class Server
data/lib/yus/session.rb CHANGED
@@ -4,6 +4,9 @@
4
4
  require 'drb'
5
5
  require 'thread'
6
6
  require 'yus/entity'
7
+ require 'pp'
8
+ require 'yaml'
9
+
7
10
  begin
8
11
  require 'encoding/character/utf-8'
9
12
  rescue LoadError
@@ -30,6 +33,27 @@ module Yus
30
33
  }
31
34
  touch!
32
35
  end
36
+ def dump_to_yaml(yaml_name=nil)
37
+ yaml_name ||= File.expand_path(File.join(__FILE__, '..', '..', '..', 'data', 'yus_dump.yml'))
38
+ FileUtils.makedirs(File.dirname(yaml_name))
39
+ if entities.is_a?(Hash) # when running unit tests, where MockPersistence uses a Hash
40
+ File.open(yaml_name, 'w') { |f| YAML.dump(@needle.persistence, f) }
41
+ else
42
+ File.open(yaml_name, 'w') {
43
+ |fh|
44
+ ids = entities.collect { |item| item.odba_id }
45
+ ids.each { |odba_id|
46
+ begin
47
+ yaml = YAML.dump(ODBA.cache.fetch(odba_id, nil))
48
+ fh.puts yaml
49
+ fh.puts
50
+ rescue
51
+ end
52
+ }
53
+ }
54
+ info "dumped #{entities.size} entities to #{yaml_name}"
55
+ end
56
+ end
33
57
  def create_entity(name, valid_until=nil, valid_from=Time.now)
34
58
  info("create_entity(name=#{name}, valid_until=#{valid_until}, valid_from=#{valid_from})")
35
59
  entity = nil
@@ -63,9 +87,6 @@ module Yus
63
87
  allow_or_fail('edit', 'yus.entities')
64
88
  user = find_or_fail(name)
65
89
  group = find_or_fail(groupname)
66
- puts group.inspect
67
- puts user.leave(group).inspect
68
- puts user.inspect
69
90
  save(user, group)
70
91
  }
71
92
  touch!
@@ -270,8 +291,9 @@ module Yus
270
291
  super(needle)
271
292
  end
272
293
  def allowed?(*args)
273
- debug("allowed?(#{args.join(', ')})")
274
- @user.allowed?(*args)
294
+ res = @user.allowed?(*args)
295
+ debug("#{@user.name} allowed?(#{args.join(', ')}) returns #{res}")
296
+ res
275
297
  end
276
298
  def name
277
299
  @user.name
data/test/suite.rb CHANGED
@@ -3,6 +3,13 @@
3
3
 
4
4
  $: << File.dirname(File.expand_path(__FILE__))
5
5
 
6
+ if /^1\.8/.match(RUBY_VERSION)
7
+ gem 'minitest'
8
+ require 'minitest/autorun'
9
+ else
10
+ require 'test/unit'
11
+ end
12
+
6
13
  Dir.foreach(File.dirname(__FILE__)) { |file|
7
14
  require file if /^test_.*\.rb$/o.match(file)
8
15
  }
data/test/test_entity.rb CHANGED
@@ -4,11 +4,12 @@
4
4
 
5
5
  $: << File.expand_path('../lib', File.dirname(__FILE__))
6
6
 
7
- require 'test/unit'
7
+ gem 'minitest'
8
+ require 'minitest/autorun'
8
9
  require 'yus/entity'
9
10
 
10
11
  module Yus
11
- class TestEntity < Test::Unit::TestCase
12
+ class TestEntity <Minitest::Test
12
13
  def setup
13
14
  @user = Entity.new('user')
14
15
  end
@@ -58,15 +59,11 @@ module Yus
58
59
  group1 = Entity.new('A Group')
59
60
  group2 = Entity.new('Another Group')
60
61
  assert_equal([], @user.affiliations)
61
- assert_nothing_raised {
62
- @user.join(group1)
63
- }
62
+ @user.join(group1)
64
63
  assert_raises(CircularAffiliationError) {
65
64
  group1.join(@user)
66
65
  }
67
- assert_nothing_raised {
68
- group1.join(group2)
69
- }
66
+ group1.join(group2)
70
67
  assert_raises(CircularAffiliationError) {
71
68
  group2.join(@user)
72
69
  }
@@ -3,11 +3,12 @@
3
3
 
4
4
  $: << File.expand_path('../lib', File.dirname(__FILE__))
5
5
 
6
- require 'test/unit'
6
+ gem 'minitest'
7
+ require 'minitest/autorun'
7
8
  require 'yus/privilege'
8
9
 
9
10
  module Yus
10
- class TestPrivilege < Test::Unit::TestCase
11
+ class TestPrivilege <Minitest::Test
11
12
  def setup
12
13
  @privilege = Privilege.new
13
14
  end
data/test/test_server.rb CHANGED
@@ -3,7 +3,6 @@
3
3
 
4
4
  $: << File.expand_path('../lib', File.dirname(__FILE__))
5
5
 
6
- require 'test/unit'
7
6
  require 'yus/server'
8
7
  require 'flexmock'
9
8
 
@@ -11,7 +10,7 @@ module Yus
11
10
  class Server
12
11
  public :authenticate, :clean
13
12
  end
14
- class TestServer < Test::Unit::TestCase
13
+ class TestServer < Minitest::Test
15
14
  def setup
16
15
  @config = FlexMock.new
17
16
  @config.should_receive(:cleaner_interval).and_return { 100000000 }
@@ -50,10 +49,8 @@ module Yus
50
49
  true
51
50
  }
52
51
  @persistence.should_receive(:find_entity).times(1).and_return { user }
53
- assert_nothing_raised {
54
- result = @server.authenticate('name', 'password')
55
- assert_equal(user, result)
56
- }
52
+ result = @server.authenticate('name', 'password')
53
+ assert_equal(user, result)
57
54
  end
58
55
  def test_autosession
59
56
  @server.autosession('domain') { |session|
@@ -74,12 +71,10 @@ module Yus
74
71
  }
75
72
  @persistence.should_receive(:find_entity).times(1).and_return { user }
76
73
  @persistence.should_receive(:save_entity).times(1)
77
- assert_nothing_raised {
78
- session = @server.login('name', 'password', 'domain')
79
- assert_instance_of(EntitySession, session)
80
- assert_kind_of(DRb::DRbUndumped, session)
81
- assert_equal([session], @server.instance_variable_get('@sessions'))
82
- }
74
+ session = @server.login('name', 'password', 'domain')
75
+ assert_instance_of(EntitySession, session)
76
+ assert_kind_of(DRb::DRbUndumped, session)
77
+ assert_equal([session], @server.instance_variable_get('@sessions'))
83
78
  end
84
79
  def test_logout
85
80
  needle = FlexMock.new
@@ -110,7 +105,7 @@ module Yus
110
105
  assert_equal([], sessions)
111
106
  end
112
107
  end
113
- class TestServerCleaner < Test::Unit::TestCase
108
+ class TestServerCleaner < Minitest::Test
114
109
  def test_autoclean
115
110
  config = FlexMock.new
116
111
  config.should_receive(:cleaner_interval).and_return { 0.5 }
data/test/test_session.rb CHANGED
@@ -3,16 +3,19 @@
3
3
 
4
4
  $: << File.expand_path('../lib', File.dirname(__FILE__))
5
5
 
6
- require 'test/unit'
6
+ gem "minitest"
7
+ require "minitest/autorun"
7
8
  require 'flexmock'
8
9
  require 'yus/session'
9
10
  require 'digest/sha2'
11
+ require 'fileutils'
12
+ require File.expand_path(File.dirname(__FILE__)+'/helpers.rb')
10
13
 
11
14
  module Yus
12
15
  class Session
13
16
  public :touch!
14
17
  end
15
- class TestAutoSession < Test::Unit::TestCase
18
+ class TestAutoSession < Minitest::Test
16
19
  def setup
17
20
  @config = FlexMock.new
18
21
  @config.should_receive(:session_timeout).and_return { 0.5 }
@@ -41,9 +44,7 @@ module Yus
41
44
  }
42
45
  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
43
46
  res = nil
44
- assert_nothing_raised {
45
- res = @session.get_entity_preference('name', 'preference_key', 'domain')
46
- }
47
+ res = @session.get_entity_preference('name', 'preference_key', 'domain')
47
48
  assert_nil(res)
48
49
  end
49
50
  def test_get_entity_preference__success
@@ -55,9 +56,7 @@ module Yus
55
56
  }
56
57
  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
57
58
  res = nil
58
- assert_nothing_raised {
59
- res = @session.get_entity_preference('name', 'preference_key', 'domain')
60
- }
59
+ res = @session.get_entity_preference('name', 'preference_key', 'domain')
61
60
  assert_equal('value', res)
62
61
  end
63
62
  def test_get_entity_preferences__no_user
@@ -75,9 +74,7 @@ module Yus
75
74
  }
76
75
  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
77
76
  res = nil
78
- assert_nothing_raised {
79
- res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
80
- }
77
+ res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
81
78
  assert_equal({'preference_key' => nil}, res)
82
79
  end
83
80
  def test_get_entity_preferences__success
@@ -89,9 +86,7 @@ module Yus
89
86
  }
90
87
  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
91
88
  res = nil
92
- assert_nothing_raised {
93
- res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
94
- }
89
+ res = @session.get_entity_preferences('name', ['preference_key'], 'domain')
95
90
  assert_equal({'preference_key' => 'value'}, res)
96
91
  end
97
92
  def test_set_entity_preference__no_user
@@ -176,7 +171,6 @@ module Yus
176
171
  false
177
172
  }
178
173
  @persistence.should_receive(:find_entity, 1).times(1).and_return { user }
179
- res = nil
180
174
  assert_raises(NotPrivilegedError) {
181
175
  @session.reset_entity_password('name', 'token', 'password')
182
176
  }
@@ -200,9 +194,7 @@ module Yus
200
194
  @persistence.should_receive(:save_entity, 1).times(1).and_return { |entity|
201
195
  assert_equal(user, entity)
202
196
  }
203
- assert_nothing_raised {
204
- @session.reset_entity_password('name', 'token', 'password')
205
- }
197
+ @session.reset_entity_password('name', 'token', 'password')
206
198
  end
207
199
  def test_grant__no_user
208
200
  @persistence.should_receive(:find_entity).and_return { |name|
@@ -229,16 +221,24 @@ module Yus
229
221
  @session.grant('username', 'action', 'key')
230
222
  end
231
223
  end
232
- class TestEntitySession < Test::Unit::TestCase
224
+ class TestEntitySession < Minitest::Test
225
+ HexDigestSample = 'cleartext'
233
226
  def setup
234
- @config = FlexMock.new
227
+ @config = FlexMock.new('config')
235
228
  @config.should_receive(:session_timeout).and_return { 0.5 }
236
- @user = FlexMock.new
237
- @persistence = FlexMock.new
238
- @logger = FlexMock.new
229
+ @config.should_receive(:token_lifetime).and_return { 0.2 }
230
+ @digest = FlexMock.new('digest')
231
+ @digest.should_receive(:hexdigest).and_return { HexDigestSample }
232
+ @config.should_receive(:digest).by_default.and_return {@digest}
233
+ @user = FlexMock.new('user')
234
+ @user.should_receive(:set_token).and_return { 'set_token' }
235
+ @user.should_receive(:name).and_return { 'name' }
236
+ @persistence = FlexMock.new('persistence')
237
+ @persistence.should_receive(:save_entity)
238
+ @logger = FlexMock.new('logger')
239
239
  @logger.should_receive(:info).and_return {}
240
240
  @logger.should_receive(:debug).and_return {}
241
- @needle = FlexMock.new
241
+ @needle = FlexMock.new('needle')
242
242
  @needle.should_receive(:persistence).and_return { @persistence }
243
243
  @needle.should_receive(:config).and_return { @config }
244
244
  @needle.should_receive(:logger).and_return { @logger }
@@ -282,6 +282,10 @@ module Yus
282
282
  }
283
283
  @session.create_entity('name')
284
284
  end
285
+ def test_generate_token
286
+ assert_equal(false, @session.expired?)
287
+ assert_equal(HexDigestSample, @session.generate_token)
288
+ end
285
289
  def test_create_entity__duplicate
286
290
  @user.should_receive(:allowed?).and_return { |action, key|
287
291
  assert_equal('edit', action)
@@ -317,9 +321,7 @@ module Yus
317
321
  true
318
322
  }
319
323
  @persistence.should_receive(:entities).and_return { [] }
320
- assert_nothing_raised {
321
- assert_equal([], @session.entities)
322
- }
324
+ assert_equal([], @session.entities)
323
325
  end
324
326
  def test_find_entity__not_allowed
325
327
  @user.should_receive(:allowed?).and_return { |action, key|
@@ -787,9 +789,7 @@ module Yus
787
789
  nil
788
790
  }
789
791
  res = nil
790
- assert_nothing_raised {
791
- res = @session.get_preference('preference_key')
792
- }
792
+ res = @session.get_preference('preference_key')
793
793
  assert_nil(res)
794
794
  end
795
795
  def test_get_entity_preference__success
@@ -799,27 +799,25 @@ module Yus
799
799
  'value'
800
800
  }
801
801
  res = nil
802
- assert_nothing_raised {
803
- res = @session.get_preference('preference_key')
804
- }
802
+ res = @session.get_preference('preference_key')
805
803
  assert_equal('value', res)
806
804
  end
807
805
  def test_ping
808
806
  assert_equal(true, @session.ping)
809
807
  end
810
808
  end
811
- class TestRootSession < Test::Unit::TestCase
809
+ class TestRootSession < Minitest::Test
812
810
  def setup
813
- @config = FlexMock.new
811
+ @config = FlexMock.new('config')
814
812
  @config.should_receive(:session_timeout).and_return { 0.5 }
815
- @persistence = FlexMock.new
816
- @logger = FlexMock.new
813
+ @needle = FlexMock.new('needle')
814
+ @persistence = MockPersistence.new
815
+ @logger = FlexMock.new('logger')
817
816
  @logger.should_receive(:info).and_return {}
818
- @logger.should_receive(:debug).and_return {}
819
- @needle = FlexMock.new
820
817
  @needle.should_receive(:persistence).and_return { @persistence }
821
- @needle.should_receive(:config).and_return { @config }
822
- @needle.should_receive(:logger).and_return { @logger }
818
+ @needle.should_receive(:logger).and_return { @logger }.by_default
819
+ @needle.should_receive(:config).and_return { @config }.by_default
820
+ @config.should_receive(:session_timeout).and_return { 0.5 }
823
821
  @session = RootSession.new(@needle)
824
822
  end
825
823
  def test_valid
@@ -832,5 +830,80 @@ module Yus
832
830
  @config.should_receive(:root_name).and_return { 'root_name' }
833
831
  assert_equal('root_name', @session.name)
834
832
  end
833
+ def test_delete_entity
834
+ entity_name = 'entity_name'
835
+ entity = @session.create_entity(entity_name, 'entity_pass')
836
+ assert_equal(entity, @session.find_entity(entity_name))
837
+ @session.delete_entity(entity_name)
838
+ assert_nil(@session.find_entity(entity_name))
839
+ end
840
+ def test_last_login
841
+ entity_name = 'entity_name'
842
+ entity = @session.create_entity(entity_name, 'entity_pass')
843
+ domain = 'domain'
844
+ entity.login(domain)
845
+ assert_equal(entity, @session.find_entity(entity_name))
846
+ #require 'pry'; binding.pry
847
+ assert_in_delta(Time.now.to_f, @session.last_login(entity_name, domain).to_f)
848
+ end
849
+ def test_show
850
+ assert_raises(UnknownEntityError) {
851
+ @session.show('unkown_name')
852
+ }
853
+ entity_name = 'entity_name'
854
+ @session.create_entity(entity_name, 'entity_pass')
855
+ assert_kind_of(String, @session.show(entity_name))
856
+ assert(@session.show(entity_name).index(entity_name) > 0)
857
+ end
858
+
859
+ def setup_for_dump
860
+ assert_raises(UnknownEntityError) {
861
+ @session.show('unkown_name')
862
+ }
863
+ @entity_name = 'entity_name'
864
+ entity_name2 = 'second_name'
865
+ password = 'entity_pass'
866
+ groupname = 'a_yus_group'
867
+ @session.create_entity(@entity_name, password)
868
+ @session.create_entity(entity_name2, password)
869
+ @session.create_entity(groupname, password)
870
+ assert_kind_of(String, @session.show(@entity_name))
871
+ assert(@session.show(@entity_name).index(@entity_name) > 0)
872
+ assert(@session.show(entity_name2).index(entity_name2) > 0)
873
+ @session.affiliate(@entity_name, groupname)
874
+ @session.grant(@entity_name, 'action', 'key')
875
+
876
+ @needle = FlexMock.new('needle')
877
+ @needle.should_receive(:persistence).and_return { @persistence }
878
+ @needle.should_receive(:config).and_return { @config }
879
+ @needle.should_receive(:logger).and_return { @logger }
880
+ end
881
+
882
+ def test_dump_to_named_yaml
883
+ setup_for_dump
884
+ tmpdir = File.expand_path(File.join(__FILE__, '../tmp'))
885
+ outFile = File.join(tmpdir, 'yus_dump.yaml')
886
+ assert(@session.dump_to_yaml(outFile))
887
+ assert(File.exist?(outFile))
888
+ assert(File.size(outFile) > 0)
889
+ dump_content = IO.read(outFile)
890
+ # puts "#{outFile} is #{File.size(outFile)} bytes lang and contains \n#{dump_content}"
891
+ refute_nil(dump_content)
892
+ refute_nil(dump_content.index(@entity_name))
893
+ FileUtils.rm_rf(tmpdir)
894
+ skip("Tests saving preferences")
895
+ end
896
+
897
+ def test_dump_to_default
898
+ setup_for_dump
899
+ assert(@session.dump_to_yaml)
900
+ outFile = File.expand_path(File.join(__FILE__, '..', '..', 'data', 'yus_dump.yml'))
901
+ assert(File.exist?(outFile), "outfile #{outFile} should exist")
902
+ assert(File.size(outFile) > 0)
903
+ dump_content = IO.read(outFile)
904
+ # puts "#{outFile} is #{File.size(outFile)} bytes lang and contains \n#{dump_content}"
905
+ refute_nil(dump_content)
906
+ refute_nil(dump_content.index(@entity_name))
907
+ end
835
908
  end
836
909
  end
metadata CHANGED
@@ -1,48 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
5
- prerelease:
4
+ version: 1.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Yasuhiro Asaka, Zeno R.R. Davatz
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-17 00:00:00.000000000 Z
11
+ date: 2014-10-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rdoc
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '3.10'
19
+ version: '4.0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: '3.10'
26
+ version: '4.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: hoe
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: '2.13'
33
+ version: '3.6'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: '2.13'
40
+ version: '3.6'
46
41
  description: ! 'ywesee user server. Works with the ywesee webframework and all the
47
42
  ywesee
48
43
 
@@ -62,6 +57,7 @@ extra_rdoc_files:
62
57
  - History.txt
63
58
  - README.txt
64
59
  files:
60
+ - .gemtest
65
61
  - Guide.txt
66
62
  - History.txt
67
63
  - LICENSE
@@ -87,9 +83,9 @@ files:
87
83
  - test/test_privilege.rb
88
84
  - test/test_server.rb
89
85
  - test/test_session.rb
90
- - .gemtest
91
86
  homepage: http://scm.ywesee.com/?p=yus/.git;a=summary
92
87
  licenses: []
88
+ metadata: {}
93
89
  post_install_message:
94
90
  rdoc_options:
95
91
  - --main
@@ -97,22 +93,20 @@ rdoc_options:
97
93
  require_paths:
98
94
  - lib
99
95
  required_ruby_version: !ruby/object:Gem::Requirement
100
- none: false
101
96
  requirements:
102
97
  - - ! '>='
103
98
  - !ruby/object:Gem::Version
104
99
  version: '0'
105
100
  required_rubygems_version: !ruby/object:Gem::Requirement
106
- none: false
107
101
  requirements:
108
102
  - - ! '>='
109
103
  - !ruby/object:Gem::Version
110
104
  version: '0'
111
105
  requirements: []
112
106
  rubyforge_project: yus
113
- rubygems_version: 1.8.25
107
+ rubygems_version: 2.3.0
114
108
  signing_key:
115
- specification_version: 3
109
+ specification_version: 4
116
110
  summary: ywesee user server
117
111
  test_files:
118
112
  - test/test_entity.rb