rcs-common 9.6.0
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 +7 -0
- data/.gitignore +49 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +1 -0
- data/Rakefile +27 -0
- data/lib/rcs-common.rb +21 -0
- data/lib/rcs-common/binary.rb +64 -0
- data/lib/rcs-common/cgi.rb +7 -0
- data/lib/rcs-common/component.rb +87 -0
- data/lib/rcs-common/crypt.rb +71 -0
- data/lib/rcs-common/deploy.rb +96 -0
- data/lib/rcs-common/diagnosticable.rb +136 -0
- data/lib/rcs-common/evidence.rb +261 -0
- data/lib/rcs-common/evidence/addressbook.rb +173 -0
- data/lib/rcs-common/evidence/application.rb +59 -0
- data/lib/rcs-common/evidence/calendar.rb +62 -0
- data/lib/rcs-common/evidence/call.rb +185 -0
- data/lib/rcs-common/evidence/camera.rb +25 -0
- data/lib/rcs-common/evidence/chat.rb +272 -0
- data/lib/rcs-common/evidence/clibpoard.rb +58 -0
- data/lib/rcs-common/evidence/command.rb +50 -0
- data/lib/rcs-common/evidence/common.rb +78 -0
- data/lib/rcs-common/evidence/content/camera/001.jpg +0 -0
- data/lib/rcs-common/evidence/content/coin/wallet_bit.dat +0 -0
- data/lib/rcs-common/evidence/content/coin/wallet_lite.dat +0 -0
- data/lib/rcs-common/evidence/content/file/Einstein.docx +0 -0
- data/lib/rcs-common/evidence/content/file/arabic.docx +0 -0
- data/lib/rcs-common/evidence/content/mouse/001.jpg +0 -0
- data/lib/rcs-common/evidence/content/mouse/002.jpg +0 -0
- data/lib/rcs-common/evidence/content/mouse/003.jpg +0 -0
- data/lib/rcs-common/evidence/content/mouse/004.jpg +0 -0
- data/lib/rcs-common/evidence/content/print/001.jpg +0 -0
- data/lib/rcs-common/evidence/content/screenshot/001.jpg +0 -0
- data/lib/rcs-common/evidence/content/screenshot/002.jpg +0 -0
- data/lib/rcs-common/evidence/content/screenshot/003.jpg +0 -0
- data/lib/rcs-common/evidence/content/url/001.jpg +0 -0
- data/lib/rcs-common/evidence/content/url/002.jpg +0 -0
- data/lib/rcs-common/evidence/content/url/003.jpg +0 -0
- data/lib/rcs-common/evidence/device.rb +23 -0
- data/lib/rcs-common/evidence/download.rb +54 -0
- data/lib/rcs-common/evidence/exec.rb +0 -0
- data/lib/rcs-common/evidence/file.rb +129 -0
- data/lib/rcs-common/evidence/filesystem.rb +71 -0
- data/lib/rcs-common/evidence/info.rb +24 -0
- data/lib/rcs-common/evidence/keylog.rb +84 -0
- data/lib/rcs-common/evidence/mail.rb +237 -0
- data/lib/rcs-common/evidence/mic.rb +39 -0
- data/lib/rcs-common/evidence/mms.rb +36 -0
- data/lib/rcs-common/evidence/money.rb +676 -0
- data/lib/rcs-common/evidence/mouse.rb +62 -0
- data/lib/rcs-common/evidence/password.rb +60 -0
- data/lib/rcs-common/evidence/photo.rb +80 -0
- data/lib/rcs-common/evidence/position.rb +303 -0
- data/lib/rcs-common/evidence/print.rb +50 -0
- data/lib/rcs-common/evidence/screenshot.rb +53 -0
- data/lib/rcs-common/evidence/sms.rb +91 -0
- data/lib/rcs-common/evidence/url.rb +133 -0
- data/lib/rcs-common/fixnum.rb +48 -0
- data/lib/rcs-common/gridfs.rb +294 -0
- data/lib/rcs-common/heartbeat.rb +96 -0
- data/lib/rcs-common/keywords.rb +50 -0
- data/lib/rcs-common/mime.rb +65 -0
- data/lib/rcs-common/mongoid.rb +19 -0
- data/lib/rcs-common/pascalize.rb +62 -0
- data/lib/rcs-common/path_utils.rb +67 -0
- data/lib/rcs-common/resolver.rb +40 -0
- data/lib/rcs-common/rest.rb +17 -0
- data/lib/rcs-common/sanitize.rb +42 -0
- data/lib/rcs-common/serializer.rb +404 -0
- data/lib/rcs-common/signature.rb +141 -0
- data/lib/rcs-common/stats.rb +94 -0
- data/lib/rcs-common/symbolize.rb +10 -0
- data/lib/rcs-common/systemstatus.rb +136 -0
- data/lib/rcs-common/temporary.rb +13 -0
- data/lib/rcs-common/time.rb +24 -0
- data/lib/rcs-common/trace.rb +138 -0
- data/lib/rcs-common/trace.yaml +42 -0
- data/lib/rcs-common/updater/client.rb +354 -0
- data/lib/rcs-common/updater/dsl.rb +178 -0
- data/lib/rcs-common/updater/payload.rb +79 -0
- data/lib/rcs-common/updater/server.rb +126 -0
- data/lib/rcs-common/updater/shared_key.rb +55 -0
- data/lib/rcs-common/updater/tmp_dir.rb +13 -0
- data/lib/rcs-common/utf16le.rb +83 -0
- data/lib/rcs-common/version.rb +5 -0
- data/lib/rcs-common/winfirewall.rb +235 -0
- data/rcs-common.gemspec +64 -0
- data/spec/gridfs_spec.rb +637 -0
- data/spec/mongoid.yaml +6 -0
- data/spec/signature_spec.rb +105 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/updater_spec.rb +80 -0
- data/tasks/deploy.rake +21 -0
- data/tasks/protect.rake +90 -0
- data/test/helper.rb +17 -0
- data/test/test_binary.rb +107 -0
- data/test/test_cgi.rb +14 -0
- data/test/test_crypt.rb +125 -0
- data/test/test_evidence.rb +52 -0
- data/test/test_evidence_manager.rb +119 -0
- data/test/test_fixnum.rb +35 -0
- data/test/test_keywords.rb +137 -0
- data/test/test_mime.rb +49 -0
- data/test/test_pascalize.rb +100 -0
- data/test/test_path_utils.rb +24 -0
- data/test/test_rcs-common.rb +7 -0
- data/test/test_sanitize.rb +40 -0
- data/test/test_serialization.rb +20 -0
- data/test/test_stats.rb +90 -0
- data/test/test_symbolize.rb +20 -0
- data/test/test_systemstatus.rb +35 -0
- data/test/test_time.rb +56 -0
- data/test/test_trace.rb +25 -0
- data/test/test_utf16le.rb +71 -0
- data/test/test_winfirewall.rb +68 -0
- metadata +423 -0
data/test/test_mime.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
class TestRcsCommon < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_mime_cod
|
|
6
|
+
mime = RCS::MimeType::get('test.cod')
|
|
7
|
+
expected = 'application/vnd.rim.cod'
|
|
8
|
+
assert_equal expected, mime
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_mime_jad
|
|
12
|
+
mime = RCS::MimeType::get('test.jad')
|
|
13
|
+
expected = 'text/vnd.sun.j2me.app-descriptor'
|
|
14
|
+
assert_equal expected, mime
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_mime_jnlp
|
|
18
|
+
mime = RCS::MimeType::get('test.jnlp')
|
|
19
|
+
expected = 'application/x-java-jnlp-file'
|
|
20
|
+
assert_equal expected, mime
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_mime_cab
|
|
24
|
+
mime = RCS::MimeType::get('test.cab')
|
|
25
|
+
#expected = 'application/vnd.ms-cab-compressed'
|
|
26
|
+
# fucking IE mobile not understanding the real mime type
|
|
27
|
+
expected = 'binary/octet-stream'
|
|
28
|
+
assert_equal expected, mime
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_mime_apk
|
|
32
|
+
mime = RCS::MimeType::get('test.apk')
|
|
33
|
+
expected = 'application/vnd.android.package-archive'
|
|
34
|
+
assert_equal expected, mime
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_mime_exe
|
|
38
|
+
mime = RCS::MimeType::get('test.exe')
|
|
39
|
+
expected = 'application/x-msdos-program'
|
|
40
|
+
assert_equal expected, mime
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_mime_unknown
|
|
44
|
+
mime = RCS::MimeType::get('test.unknown')
|
|
45
|
+
expected = 'binary/octet-stream'
|
|
46
|
+
assert_equal expected, mime
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'helper'
|
|
4
|
+
require 'securerandom'
|
|
5
|
+
|
|
6
|
+
class PascalizeTest < Test::Unit::TestCase
|
|
7
|
+
def test_pascalize
|
|
8
|
+
source = "ciao"
|
|
9
|
+
# length c i a o null
|
|
10
|
+
dest = "\x0a\x00\x00\x00" + "\x63\x00" + "\x69\x00" + "\x61\x00" + "\x6f\x00" + "\x00\x00"
|
|
11
|
+
pascal = source.pascalize
|
|
12
|
+
assert_equal dest, pascal
|
|
13
|
+
# this is a stream of bytes represented as ASCII
|
|
14
|
+
assert_equal 'ASCII-8BIT', pascal.encoding.to_s
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_unpascalize
|
|
18
|
+
# length c i a o null
|
|
19
|
+
source = "\x0a\x00\x00\x00" + "\x63\x00" + "\x69\x00" + "\x61\x00" + "\x6f\x00" + "\x00\x00"
|
|
20
|
+
dest = "ciao"
|
|
21
|
+
pascal = source.unpascalize
|
|
22
|
+
assert_equal dest, pascal
|
|
23
|
+
assert_equal dest.encoding, pascal.encoding
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_pascalize_unicode
|
|
27
|
+
source = "スパイ"
|
|
28
|
+
# length ス パ イ null
|
|
29
|
+
dest = "\x08\x00\x00\x00" + "\xb9\x30" + "\xd1\x30" + "\xa4\x30" + "\x00\x00"
|
|
30
|
+
pascal = source.pascalize
|
|
31
|
+
# we have to force the comparison in BINARY (alias for ASCII-8BIT) otherwise the
|
|
32
|
+
# assert_equal function will complain about invalid UTF-8 sequence
|
|
33
|
+
assert_equal dest.force_encoding('BINARY'), pascal.force_encoding('BINARY')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_unpascalize_unicode
|
|
37
|
+
# length ス パ イ null
|
|
38
|
+
source = "\x08\x00\x00\x00" + "\xb9\x30" + "\xd1\x30" + "\xa4\x30" + "\x00\x00"
|
|
39
|
+
dest = "スパイ"
|
|
40
|
+
pascal = source.unpascalize
|
|
41
|
+
assert_equal dest, pascal
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_pascalize_with_zero
|
|
45
|
+
source = "a\x00s"
|
|
46
|
+
# length a null s null
|
|
47
|
+
dest = "\x08\x00\x00\x00" + "\x61\x00" + "\x00\x00" + "\x73\x00" + "\x00\x00"
|
|
48
|
+
assert_equal dest, source.pascalize
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_unpascalize_with_zero
|
|
52
|
+
# length a null s null
|
|
53
|
+
source = "\x08\x00\x00\x00" + "\x61\x00" + "\x00\x00" + "\x73\x00" + "\x00\x00"
|
|
54
|
+
dest = "a\x00s"
|
|
55
|
+
pascal = source.unpascalize
|
|
56
|
+
assert_equal dest, pascal
|
|
57
|
+
assert_equal dest.encoding, pascal.encoding
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_pascalize_null
|
|
61
|
+
source = ""
|
|
62
|
+
# length null
|
|
63
|
+
dest = "\x02\x00\x00\x00" + "\x00\x00"
|
|
64
|
+
assert_equal dest, source.pascalize
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_unpascalize_null
|
|
68
|
+
# length null
|
|
69
|
+
source = "\x02\x00\x00\x00" + "\x00\x00"
|
|
70
|
+
dest = ""
|
|
71
|
+
assert_equal dest, source.unpascalize
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_unpascalize_multi
|
|
75
|
+
multi_source = "\x0a\x00\x00\x00\x41\x00\x4c\x00\x6f\x00\x52\x00\x00\x00" +
|
|
76
|
+
"\x08\x00\x00\x00\xb9\x30\xd1\x30\xa4\x30\x00\x00" +
|
|
77
|
+
"\x1c\x00\x00\x00\x31\x00\x39\x00\x32\x00\x2e\x00\x31\x00\x36\x00\x38\x00\x2e\x00\x31\x00\x2e\x00\x31\x00\x37\x00\x35\x00\x00\x00"
|
|
78
|
+
multi_dest = ["ALoR", "スパイ", "192.168.1.175"]
|
|
79
|
+
assert_equal multi_dest, multi_source.unpascalize_ary
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_unpascalize_multi_and_random
|
|
83
|
+
multi_source = "\x0a\x00\x00\x00c\x00i\x00a\x00o\x00\x00\x00" +
|
|
84
|
+
"\x0a\x00\x00\x00m\x00i\x00a\x00o\x00\x00\x00" +
|
|
85
|
+
"\x08\x00\x00\x00b\x00a\x00o\x00\x00\x00" +
|
|
86
|
+
SecureRandom.random_bytes(32)
|
|
87
|
+
|
|
88
|
+
# the last part of random bytes should be ignored as error
|
|
89
|
+
multi_dest = ["ciao", "miao", "bao"]
|
|
90
|
+
assert_equal multi_dest, multi_source.unpascalize_ary
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_unpascalize_random
|
|
94
|
+
source = SecureRandom.random_bytes(64)
|
|
95
|
+
|
|
96
|
+
assert_nil source.unpascalize
|
|
97
|
+
assert_equal [], source.unpascalize_ary
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'helper'
|
|
4
|
+
require 'rcs-common/path_utils'
|
|
5
|
+
|
|
6
|
+
class PathutilsTest < Test::Unit::TestCase
|
|
7
|
+
|
|
8
|
+
class IncludePathUtils; include RCS::Common::PathUtils; end
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
@subject = IncludePathUtils.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_require_release
|
|
15
|
+
assert_raise { @subject.require_release 'folder/file' }
|
|
16
|
+
assert_raise { @subject.require_release 'rcsdb/folder/folder/file' }
|
|
17
|
+
|
|
18
|
+
assert_respond_to(Object.new, :require_release)
|
|
19
|
+
assert_respond_to(self, :require_release)
|
|
20
|
+
|
|
21
|
+
assert_raise(LoadError) { @subject.require_release 'rcs-project/file1' }
|
|
22
|
+
assert_raise(LoadError) { @subject.require_release 'rcs-project-release/file1' }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
|
|
5
|
+
class SanitizeTest < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def test_binary
|
|
8
|
+
input = "keep this and not those \x90 \x91 \x92"
|
|
9
|
+
output = 'keep this and not those '
|
|
10
|
+
assert_equal output, input.remove_invalid_chars
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_punctuation
|
|
14
|
+
input = "keep all .,;:!? and also @#%&*()[]{}\"'\\/+="
|
|
15
|
+
output = "keep all .,;:!? and also @#%&*()[]{}\"'\\/+="
|
|
16
|
+
assert_equal output, input.remove_invalid_chars
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_specials
|
|
20
|
+
input = "keep them \$ ^ |"
|
|
21
|
+
output = "keep them \$ ^ |"
|
|
22
|
+
assert_equal output, input.remove_invalid_chars
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_strip_html_tags
|
|
26
|
+
input = "Strip <i>these</i> tags!"
|
|
27
|
+
output = "Strip these tags!"
|
|
28
|
+
assert_equal output, input.strip_html_tags
|
|
29
|
+
|
|
30
|
+
input = "<b>Bold</b> no more! <a href='more.html'>See more here</a>..."
|
|
31
|
+
output = "Bold no more! See more here..."
|
|
32
|
+
assert_equal output, input.strip_html_tags
|
|
33
|
+
|
|
34
|
+
input = "<div id='top-bar'>Welcome to my website!</div>"
|
|
35
|
+
output = "Welcome to my website!"
|
|
36
|
+
assert_equal output, input.strip_html_tags
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "helper"
|
|
2
|
+
|
|
3
|
+
class TestSerialization < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
# Fake test
|
|
6
|
+
def test_generate_prefix
|
|
7
|
+
type = 0xff
|
|
8
|
+
size = 0xaabbcc
|
|
9
|
+
|
|
10
|
+
assert_equal "\xCC\xBB\xAA\xFF".force_encoding('BINARY'), RCS::Serialization::prefix(type, size)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_decode_prefix
|
|
14
|
+
type, size = RCS::Serialization::decode_prefix("\xCC\xBB\xAA\xFF")
|
|
15
|
+
|
|
16
|
+
assert_equal type, 0xff
|
|
17
|
+
assert_equal size, 0xaabbcc
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
data/test/test_stats.rb
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require "helper"
|
|
2
|
+
|
|
3
|
+
module RCS
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class StatsManager < Stats
|
|
7
|
+
def initialize
|
|
8
|
+
@sections = {:minutes => 0, :hours => 60, :days => 24, :weeks => 7}
|
|
9
|
+
@template = {count: 0}
|
|
10
|
+
super
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class TestStats < Test::Unit::TestCase
|
|
15
|
+
|
|
16
|
+
def setup
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_single_minute
|
|
21
|
+
statistic = StatsManager.new
|
|
22
|
+
statistic.add count: 1
|
|
23
|
+
stats = statistic.stats
|
|
24
|
+
|
|
25
|
+
assert_equal 1, stats[:total][:count]
|
|
26
|
+
assert_equal 1, stats[:minutes][:last][0][:count]
|
|
27
|
+
assert_equal 1, stats[:hours][:last][0][:count]
|
|
28
|
+
assert_equal 1, stats[:days][:last][0][:count]
|
|
29
|
+
assert_equal 1, stats[:weeks][:last][0][:count]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_two_minute
|
|
33
|
+
statistic = StatsManager.new
|
|
34
|
+
statistic.add count: 1
|
|
35
|
+
statistic.calculate
|
|
36
|
+
statistic.add count: 1
|
|
37
|
+
stats = statistic.stats
|
|
38
|
+
|
|
39
|
+
assert_equal 2, stats[:total][:count]
|
|
40
|
+
assert_equal 1, stats[:minutes][:last][0][:count]
|
|
41
|
+
assert_equal 2, stats[:hours][:last][0][:count]
|
|
42
|
+
assert_equal 2, stats[:days][:last][0][:count]
|
|
43
|
+
assert_equal 2, stats[:weeks][:last][0][:count]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_one_hour
|
|
47
|
+
statistic = StatsManager.new
|
|
48
|
+
|
|
49
|
+
1.upto(60) do
|
|
50
|
+
statistic.add count: 1
|
|
51
|
+
statistic.calculate
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
stats = statistic.stats
|
|
55
|
+
|
|
56
|
+
assert_equal 60, stats[:total][:count]
|
|
57
|
+
assert_equal 0, stats[:minutes][:last][0][:count]
|
|
58
|
+
assert_equal 0, stats[:hours][:last][0][:count]
|
|
59
|
+
assert_equal 60, stats[:days][:last][0][:count]
|
|
60
|
+
assert_equal 60, stats[:weeks][:last][0][:count]
|
|
61
|
+
|
|
62
|
+
assert_equal 1, stats[:minutes][:average][:count]
|
|
63
|
+
assert_equal 60, stats[:hours][:average][:count]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_one_day
|
|
67
|
+
statistic = StatsManager.new
|
|
68
|
+
|
|
69
|
+
1.upto(1440) do
|
|
70
|
+
statistic.add count: 1
|
|
71
|
+
statistic.calculate
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
stats = statistic.stats
|
|
75
|
+
|
|
76
|
+
assert_equal 1440, stats[:total][:count]
|
|
77
|
+
assert_equal 0, stats[:minutes][:last][0][:count]
|
|
78
|
+
assert_equal 0, stats[:hours][:last][0][:count]
|
|
79
|
+
assert_equal 0, stats[:days][:last][0][:count]
|
|
80
|
+
assert_equal 1440, stats[:weeks][:last][0][:count]
|
|
81
|
+
|
|
82
|
+
assert_equal 1, stats[:minutes][:average][:count]
|
|
83
|
+
assert_equal 60, stats[:hours][:average][:count]
|
|
84
|
+
assert_equal 1440, stats[:days][:average][:count]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end #RCS
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
class TestRcsCommon < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_symbolize
|
|
6
|
+
src = {'one' => 1, 'two' => 2}
|
|
7
|
+
dst = {:one => 1, :two => 2}
|
|
8
|
+
|
|
9
|
+
assert_equal dst, src.symbolize
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_symbolize_mixed
|
|
13
|
+
src = {'one' => 1, 'two' => 2, 1 => 'one', 2 => 'two'}
|
|
14
|
+
dst = {:one => 1, :two => 2, 1 => 'one', 2 => 'two'}
|
|
15
|
+
|
|
16
|
+
assert_equal dst, src.symbolize
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
|
|
3
|
+
module RCS
|
|
4
|
+
|
|
5
|
+
class TestStatus < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def test_disk
|
|
8
|
+
disk = SystemStatus.disk_free
|
|
9
|
+
|
|
10
|
+
# it should return a number
|
|
11
|
+
assert_kind_of Fixnum, disk
|
|
12
|
+
# it is a percentage
|
|
13
|
+
assert_equal true, (disk >= 0 and disk <= 100)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_load
|
|
17
|
+
load = SystemStatus.cpu_load
|
|
18
|
+
|
|
19
|
+
# it should return a number
|
|
20
|
+
assert_kind_of Fixnum, load
|
|
21
|
+
# it could be even greater than 100 on high load
|
|
22
|
+
assert_equal true, (load >= 0)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_process_cpu
|
|
26
|
+
cpu = SystemStatus.my_cpu_load('test')
|
|
27
|
+
|
|
28
|
+
# it should return a number
|
|
29
|
+
assert_kind_of Fixnum, cpu
|
|
30
|
+
# it is a percentage
|
|
31
|
+
assert_equal true, (cpu >= 0 and cpu <= 100)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end #RCS::
|
data/test/test_time.rb
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require "helper"
|
|
2
|
+
|
|
3
|
+
class TestTime < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@high_memory = "\x90\xd9\xcb\x01"
|
|
7
|
+
@low_memory = "\x50\x67\xe0\x63"
|
|
8
|
+
@high = 0x01cbd990
|
|
9
|
+
@low = 0x63e06750
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_from_filetime
|
|
13
|
+
assert_equal '2011-03-03 10:47:28 UTC', Time.from_filetime(@high, @low).to_s
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_from_filetime_has_millisec
|
|
17
|
+
assert_equal Time.from_filetime(@high, @low).usec, 436001
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_unpack_from_memory
|
|
21
|
+
h = @high_memory.unpack('I').shift
|
|
22
|
+
l = @low_memory.unpack('I').shift
|
|
23
|
+
assert_equal '2011-03-03 10:47:28 UTC', Time.from_filetime(h, l).to_s
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_to_filetime
|
|
27
|
+
date = Time.parse('2011-03-03 10:47:28 UTC')
|
|
28
|
+
date = Time.at(date.to_i, 436001)
|
|
29
|
+
|
|
30
|
+
filetime = date.to_filetime.pack('L*')
|
|
31
|
+
|
|
32
|
+
memory = (@low_memory + @high_memory).force_encoding('ASCII-8BIT')
|
|
33
|
+
|
|
34
|
+
assert_equal memory, filetime
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_epoch
|
|
38
|
+
epoch = Time.from_filetime(0, 0)
|
|
39
|
+
|
|
40
|
+
assert_equal '1601-01-01 00:00:00 UTC', epoch.to_s
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_from_and_to
|
|
44
|
+
now = Time.now.getutc
|
|
45
|
+
|
|
46
|
+
buff = StringIO.new
|
|
47
|
+
|
|
48
|
+
buff.write now.to_filetime.pack('L*')
|
|
49
|
+
buff.rewind
|
|
50
|
+
low, high = buff.read(8).unpack('L*')
|
|
51
|
+
check = Time.from_filetime(high, low)
|
|
52
|
+
|
|
53
|
+
# we explicitly ignore the usec, msec part
|
|
54
|
+
assert_equal now.to_s, check.to_s
|
|
55
|
+
end
|
|
56
|
+
end
|