summaryrefslogtreecommitdiff
path: root/test/etc/test_etc.rb
blob: 48a17ff4bf599e99e821887ef4842ebe12f7d5fd (plain)
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
require "test/unit"
require "etc"

class TestEtc < Test::Unit::TestCase
  def test_getlogin
    s = Etc.getlogin
    assert(s.is_a?(String) || s == nil, "getlogin must return a String or nil")
  end

  def test_passwd
    Etc.passwd do |s|
      assert_instance_of(String, s.name)
      assert_instance_of(String, s.passwd) if s.respond_to?(:passwd)
      assert_kind_of(Integer, s.uid)
      assert_kind_of(Integer, s.gid)
      assert_instance_of(String, s.gecos) if s.respond_to?(:gecos)
      assert_instance_of(String, s.dir)
      assert_instance_of(String, s.shell)
      assert_kind_of(Integer, s.change) if s.respond_to?(:change)
      assert_kind_of(Integer, s.quota) if s.respond_to?(:quota)
      assert_kind_of(Integer, s.age) if s.respond_to?(:age)
      assert_instance_of(String, s.uclass) if s.respond_to?(:uclass)
      assert_instance_of(String, s.comment) if s.respond_to?(:comment)
      assert_kind_of(Integer, s.expire) if s.respond_to?(:expire)
    end

    assert_raise(RuntimeError) { Etc.passwd { Etc.passwd { } } }
  end

  def test_getpwuid
    passwd = []
    Etc.passwd {|s| passwd << s }
    passwd.each do |s|
      assert_equal(s, Etc.getpwuid(s.uid))
      assert_equal(s, Etc.getpwuid) if Etc.getlogin == s.name
    end
  end

  def test_getpwnam
    passwd = []
    Etc.passwd {|s| passwd << s }
    passwd.each do |s|
      assert_equal(s, Etc.getpwnam(s.name))
    end
  end

  def test_setpwent
    a = []
    Etc.passwd do |s|
      a << s
      Etc.setpwent if a.size == 3
    end
    assert_equal(a[0, 3], a[3, 3]) if a.size >= 6
  end

  def test_getpwent
    a = []
    Etc.passwd {|s| a << s }
    b = []
    Etc.passwd do |s|
      b << s
      s = Etc.getpwent
      break unless s
      b << s
    end
    assert_equal(a, b)
  end

  def test_endpwent
    a = []
    Etc.passwd do |s|
      a << s
      Etc.endpwent if a.size == 3
    end
    assert_equal(a[0, 3], a[3, 3]) if a.size >= 6
  end

  def test_group
    Etc.group do |s|
      assert_instance_of(String, s.name)
      assert_instance_of(String, s.passwd) if s.respond_to?(:passwd)
      assert_kind_of(Integer, s.gid)
    end

    assert_raise(RuntimeError) { Etc.group { Etc.group { } } }
  end

  def test_getgrgid
    groups = []
    Etc.group do |s|
      groups << s
    end
    groups.each do |s|
      assert_equal(s, Etc.getgrgid(s.gid))
      assert_equal(s, Etc.getgrgid) if Etc.getlogin == s.name
    end
  end

  def test_getgrnam
    groups = []
    Etc.group do |s|
      groups << s
    end
    groups.each do |s|
      assert_equal(s, Etc.getgrnam(s.name))
    end
  end

  def test_setgrent
    a = []
    Etc.group do |s|
      a << s
      Etc.setgrent if a.size == 3
    end
    assert_equal(a[0, 3], a[3, 3]) if a.size >= 6
  end

  def test_getgrent
    a = []
    Etc.group {|s| a << s }
    b = []
    Etc.group do |s|
      b << s
      s = Etc.getgrent
      break unless s
      b << s
    end
    assert_equal(a, b)
  end

  def test_endgrent
    a = []
    Etc.group do |s|
      a << s
      Etc.endgrent if a.size == 3
    end
    assert_equal(a[0, 3], a[3, 3]) if a.size >= 6
  end
end