overhaul struct initializers, options hash only and a lot of options now supported
[lwes-ruby.git] / test / unit / test_struct.rb
blobff454c405a6e12511d26db054f77cb73575299d6
1 require "#{File.dirname(__FILE__)}/../test_helper"
3 module Dummy
4 end
5 class TestStruct < Test::Unit::TestCase
7    EXPECT_DB = {
8     :SenderPort => LWES::U_INT_16,
9     :st => LWES::STRING,
10     :enc => LWES::INT_16,
11     :SiteID => LWES::U_INT_16,
12     :ReceiptTime => LWES::INT_64,
13     :SenderIP => LWES::IP_ADDR,
15     :t_ip_addr => LWES::IP_ADDR,
16     :t_bool => LWES::BOOLEAN,
17     :t_uint64 => LWES::U_INT_64,
18     :t_uint32 => LWES::U_INT_32,
19     :t_int64 => LWES::INT_64,
20     :t_string => LWES::STRING,
21     :t_int32 => LWES::INT_32,
22     :t_uint16 => LWES::U_INT_16,
23     :t_int16 => LWES::INT_16
24   }
25   EXPECT_LIST = [
26     # class-specific fields first
27     [ :t_bool, LWES::BOOLEAN],
28     [ :t_int16, LWES::INT_16 ],
29     [ :t_int32, LWES::INT_32],
30     [ :t_int64, LWES::INT_64],
31     [ :t_ip_addr, LWES::IP_ADDR],
32     [ :t_string, LWES::STRING],
33     [ :t_uint16, LWES::U_INT_16],
34     [ :t_uint32, LWES::U_INT_32],
35     [ :t_uint64, LWES::U_INT_64],
37     # MetaEventInfo
38     [ :ReceiptTime, LWES::INT_64],
39     [ :SenderIP, LWES::IP_ADDR],
40     [ :SenderPort, LWES::U_INT_16],
41     [ :SiteID, LWES::U_INT_16],
42     [ :enc, LWES::INT_16],
43     [ :st, LWES::STRING],
44   ]
46   ESF_FILE = "#{File.dirname(__FILE__)}/test1.esf"
48   def test_constants
49     assert_instance_of Module, LWES, "LWES is not a module"
50   end
52   def test_new_with_defaults
53     a = LWES::Struct.new(:file=>ESF_FILE)
54     assert a.instance_of?(Class)
55     assert_equal "Event1", a.name
56     assert a.const_get(:TYPE_DB).instance_of?(Hash)
57     assert_equal EXPECT_DB, a.const_get(:TYPE_DB)
58     assert_equal EXPECT_LIST, a.const_get(:TYPE_LIST)
59     y = a.new
60     assert_equal "Event1", y.class.name
61     assert_kind_of(::Struct, y)
62   end
64   def test_new_with_alt_name
65     a = LWES::Struct.new(:file=>ESF_FILE,:class=>:Event,:name=>:Event1)
66     assert a.instance_of?(Class)
67     assert_equal "Event", a.name
68     assert a.const_get(:TYPE_DB).instance_of?(Hash)
69     assert_equal EXPECT_DB, a.const_get(:TYPE_DB)
70     y = a.new
71     assert_equal "Event", y.class.name
72     assert_kind_of(::Struct, y)
73   end
75   def test_new_in_module
76     a = LWES::Struct.new(:file=>ESF_FILE,:class=>:Event1,:parent=>LWES)
77     assert a.instance_of?(Class)
78     assert_equal "LWES::Event1", a.name
79     assert a.const_get(:TYPE_DB).instance_of?(Hash)
80     assert_equal EXPECT_DB, a.const_get(:TYPE_DB)
81     y = a.new
82     assert_equal "LWES::Event1", y.class.name
83     assert_kind_of(::Struct, y)
84   end
86   def test_eval
87     a = LWES::Struct.new(:file=>ESF_FILE,:class=>:Eval,:name=>:Event1) do
88       def aaaaaaaa
89         true
90       end
92       class << self
93         def get_type_db
94           const_get(:TYPE_DB)
95         end
96       end
97     end
98     y = a.new
99     assert y.respond_to?(:aaaaaaaa)
100     assert_instance_of TrueClass, y.aaaaaaaa
101     assert_equal a.const_get(:TYPE_DB).object_id, a.get_type_db.object_id
102     assert_equal EXPECT_DB, a.get_type_db
103   end
105   def test_optional
106     a = LWES::Struct.new(:file=>ESF_FILE,
107                          :class=>:Optional,
108                          :name=>:Event1,
109                          :optional => %w(SenderPort SiteID ReceiptTime))
110     expect_optional = {
111       :SenderPort => true,
112       :SiteID => true,
113       :ReceiptTime => true
114     }
115     assert_equal expect_optional, a.const_get(:OPTIONAL)
116   end
118   def test_optional_meta_event_info
119     expect = {
120       :ReceiptTime => true,
121       :SenderIP => true,
122       :SenderPort => true,
123       :SiteID => true,
124       :enc => true,
125       :st => true
126     }
127     a = LWES::Struct.new(:file=>ESF_FILE,
128                          :class=>:MetaOptional,
129                          :name=>:Event1,
130                          :optional => %w(MetaEventInfo))
131     assert_equal expect, a.const_get(:OPTIONAL)
132   end
135   def test_new_initialize
136     a = LWES::Struct.new(:file=>ESF_FILE,
137                          :class=>:Init,
138                          :name=>:Event1,
139                          :parent=>Dummy)
140     y = Dummy::Init.new(:t_ip_addr => "192.168.0.1", :t_bool => true)
141     assert_equal "192.168.0.1", y.t_ip_addr
142     assert_equal true, y.t_bool
143   end
145   def test_new_initialize_defaults
146     a = LWES::Struct.new(:file=>ESF_FILE,
147                          :class=> :LWES_Blah,
148                          :name=>:Event1,
149                          :defaults => { :enc => 1 })
150     y = LWES_Blah.new
151     assert_equal 1, y.enc
152   end
154   def test_new_initialize_defaults_and_hash
155     a = LWES::Struct.new(:file=>ESF_FILE,
156                          :class=> :LWES_Foo,
157                          :name=>:Event1,
158                          :defaults => { :enc => 1 })
159     y = LWES_Foo.new(:enc => 2)
160     assert_equal 2, y.enc
161   end
163   def test_new_initialize_struct_style
164     a = LWES::Struct.new(:file=>ESF_FILE,
165                          :class=> :LWES_New,
166                          :name=>:Event1)
167     y = LWES_Foo.new(true, -16, -32, -64, "127.0.0.1", "HI", 16, 32, 64)
168     assert_equal true, y.t_bool
169     assert_equal -16, y.t_int16
170     assert_equal -32, y.t_int32
171     assert_equal -64, y.t_int64
172     assert_equal "127.0.0.1", y.t_ip_addr
173     assert_equal "HI", y.t_string
174     assert_equal 16, y.t_uint16
175     assert_equal 32, y.t_uint32
176     assert_equal 64, y.t_uint64
177   end
179   def test_skip_attr
180     a = LWES::Struct.new(:file=>ESF_FILE,
181                          :class=> :LWES_Skip,
182                          :name=>:Event1,
183                          :skip => %w(SenderIP SenderPort SiteID ReceiptTime))
184     y = LWES_Skip.new
185     assert ! y.respond_to?(:SenderIP)
186     assert ! y.respond_to?(:SenderPort)
187     assert ! y.respond_to?(:SiteID)
188     assert ! y.respond_to?(:ReceiptTime)
189     assert y.respond_to?(:enc)
190     assert y.respond_to?(:st)
191   end
193   def test_skip_regexp
194     a = LWES::Struct.new(:file=>ESF_FILE,
195                          :class=> :LWES_SkipRe,
196                          :name=>:Event1,
197                          :skip => %r(\AS))
198     y = LWES_SkipRe.new
199     assert ! y.respond_to?(:SenderIP)
200     assert ! y.respond_to?(:SenderPort)
201     assert ! y.respond_to?(:SiteID)
202     assert y.respond_to?(:ReceiptTime)
203     assert y.respond_to?(:enc)
204     assert y.respond_to?(:st)
205   end
207   def test_optional_regexp
208     a = LWES::Struct.new(:file=>ESF_FILE,
209                          :class=> :LWES_OptionalRe,
210                          :name=>:Event1,
211                          :optional=> %r(\AS))
212     expect = {:SenderIP=>true, :SenderPort=>true, :SiteID=>true}
213     assert_equal expect, LWES_OptionalRe::OPTIONAL
214   end