rims 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -389,9 +389,10 @@ module RIMS::Test
389
389
  assert_equal((1..50).to_set, folder.parse_msg_set('1:*', uid: false))
390
390
  assert_equal((1..99).to_set, folder.parse_msg_set('1:*', uid: true))
391
391
 
392
- assert_raise(RIMS::MessageSetSyntaxError) {
392
+ error = assert_raise(RIMS::MessageSetSyntaxError) {
393
393
  folder.parse_msg_set('detarame')
394
394
  }
395
+ assert_match(/invalid message sequence format/, error.message)
395
396
  end
396
397
 
397
398
  def test_mail_folder_parse_msg_set_empty
@@ -509,9 +510,14 @@ module RIMS::Test
509
510
  assert_equal(1..10, RIMS::MailFolder.parse_msg_seq('1:10', 99))
510
511
  assert_equal(1..99, RIMS::MailFolder.parse_msg_seq('1:*', 99))
511
512
  assert_equal(99..99, RIMS::MailFolder.parse_msg_seq('*:*', 99))
512
- assert_raise(RIMS::MessageSetSyntaxError) {
513
+ error = assert_raise(RIMS::MessageSetSyntaxError) {
513
514
  RIMS::MailFolder.parse_msg_seq('detarame', 99)
514
515
  }
516
+ assert_match(/invalid message sequence format/, error.message)
517
+ error = assert_raise(RIMS::MessageSetSyntaxError) {
518
+ RIMS::MailFolder.parse_msg_seq('0', 99)
519
+ }
520
+ assert_match(/out of range of message sequence number/, error.message)
515
521
  end
516
522
 
517
523
  def test_parse_msg_set
@@ -525,12 +531,20 @@ module RIMS::Test
525
531
  assert_equal([ 1, 2, 3, 11, 97, 98, 99 ].to_set, RIMS::MailFolder.parse_msg_set('1:3,11,97:*', 99))
526
532
  assert_equal((1..99).to_set, RIMS::MailFolder.parse_msg_set('1:70,30:*', 99))
527
533
 
528
- assert_raise(RIMS::MessageSetSyntaxError) {
534
+ error = assert_raise(RIMS::MessageSetSyntaxError) {
529
535
  RIMS::MailFolder.parse_msg_set('detarame', 99)
530
536
  }
531
- assert_raise(RIMS::MessageSetSyntaxError) {
537
+ assert_match(/invalid message sequence format/, error.message)
538
+
539
+ error = assert_raise(RIMS::MessageSetSyntaxError) {
532
540
  RIMS::MailFolder.parse_msg_set('1,2,X', 99)
533
541
  }
542
+ assert_match(/invalid message sequence format/, error.message)
543
+
544
+ error = assert_raise(RIMS::MessageSetSyntaxError) {
545
+ RIMS::MailFolder.parse_msg_set('0', 99)
546
+ }
547
+ assert_match(/out of range of message sequence number/, error.message)
534
548
  end
535
549
  end
536
550
 
@@ -569,11 +583,12 @@ module RIMS::Test
569
583
  def test_recovery_empty
570
584
  mail_store = make_mail_store
571
585
  assert_equal(false, mail_store.abort_transaction?)
572
- assert_raise(RuntimeError) {
586
+ error = assert_raise(RuntimeError) {
573
587
  mail_store.transaction do
574
588
  raise 'abort'
575
589
  end
576
590
  }
591
+ assert_equal('abort', error.message)
577
592
  assert_equal(true, mail_store.abort_transaction?)
578
593
  mail_store.close
579
594
 
@@ -594,11 +609,12 @@ module RIMS::Test
594
609
  mail_store.add_mbox('bar')
595
610
 
596
611
  assert_equal(false, mail_store.abort_transaction?)
597
- assert_raise(RuntimeError) {
612
+ error = assert_raise(RuntimeError) {
598
613
  mail_store.transaction do
599
614
  raise 'abort'
600
615
  end
601
616
  }
617
+ assert_equal('abort', error.message)
602
618
  assert_equal(true, mail_store.abort_transaction?)
603
619
  mail_store.close
604
620
 
@@ -6472,9 +6472,10 @@ LOGOUT
6472
6472
  assert_equal([ 'foo', 'a mailbox ' ],
6473
6473
  RIMS::Protocol::Decoder.decode_delivery_target_mailbox("b64user-mbox #{base64_username} a mailbox "))
6474
6474
 
6475
- assert_raise(RIMS::SyntaxError) {
6475
+ error = assert_raise(RIMS::SyntaxError) {
6476
6476
  RIMS::Protocol::Decoder.decode_delivery_target_mailbox("unknown-encode-type #{base64_username} INBOX")
6477
6477
  }
6478
+ assert_match(/unknown mailbox encode type/, error.message)
6478
6479
  end
6479
6480
 
6480
6481
  def test_encode_delivery_target_mailbox
@@ -229,9 +229,10 @@ module RIMS::Test
229
229
  assert_fetch(1, [ "BODY[4.2.2] #{literal(@mpart_mail.parts[3].parts[1].message.parts[1].body.raw_source)}" ])
230
230
  }
231
231
 
232
- assert_raise(RIMS::SyntaxError) {
232
+ error = assert_raise(RIMS::SyntaxError) {
233
233
  @parser.parse(make_body('BODY[MIME]'))
234
234
  }
235
+ assert_match(/need for section index/, error.message)
235
236
 
236
237
  parse_fetch_attribute(make_body('BODY[1.MIME]')) {
237
238
  assert_fetch(0, [ "BODY[1.MIME] #{literal(@simple_mail.header.raw_source)}" ])
@@ -965,12 +966,15 @@ module RIMS::Test
965
966
  assert_nil(RIMS::Protocol::FetchParser::Utils.get_body_section(@mpart_mail, [ 4, 2, 3 ]))
966
967
  assert_nil(RIMS::Protocol::FetchParser::Utils.get_body_section(@mpart_mail, [ 4, 2, 2, 3 ]))
967
968
 
968
- assert_raise(RIMS::SyntaxError) {
969
+ error = assert_raise(RIMS::SyntaxError) {
969
970
  RIMS::Protocol::FetchParser::Utils.get_body_section(@simple_mail, [ 0 ])
970
971
  }
971
- assert_raise(RIMS::SyntaxError) {
972
+ assert_match(/not a none-zero body section number/, error.message)
973
+
974
+ error = assert_raise(RIMS::SyntaxError) {
972
975
  RIMS::Protocol::FetchParser::Utils.get_body_section(@mpart_mail, [ 4, 2, 2, 0 ])
973
976
  }
977
+ assert_match(/not a none-zero body section number/, error.message)
974
978
  end
975
979
 
976
980
  def test_get_body_content
@@ -76,10 +76,18 @@ module RIMS::Test
76
76
  end
77
77
  private :assert_search_cond
78
78
 
79
- def assert_search_syntax_error(search_key_list)
80
- assert_raise(RIMS::SyntaxError) {
79
+ def assert_search_syntax_error(search_key_list, expected_error_message)
80
+ error = assert_raise(RIMS::SyntaxError) {
81
81
  @parser.parse(search_key_list)
82
82
  }
83
+ case (expected_error_message)
84
+ when String
85
+ assert_equal(expected_error_message, error.message)
86
+ when Regexp
87
+ assert_match(expected_error_message, error.message)
88
+ else
89
+ flunk
90
+ end
83
91
  end
84
92
  private :assert_search_syntax_error
85
93
 
@@ -128,8 +136,8 @@ module RIMS::Test
128
136
  assert_search_cond(2, false)
129
137
  }
130
138
 
131
- assert_search_syntax_error([ 'BCC' ])
132
- assert_search_syntax_error([ 'BCC', [ :group, 'foo' ] ])
139
+ assert_search_syntax_error([ 'BCC' ], /need for a search string/)
140
+ assert_search_syntax_error([ 'BCC', [ :group, 'foo' ] ], /search string expected as <String> but was/)
133
141
  end
134
142
 
135
143
  def test_parse_before
@@ -146,9 +154,9 @@ module RIMS::Test
146
154
  assert_search_cond(2, false)
147
155
  }
148
156
 
149
- assert_search_syntax_error([ 'BEFORE' ])
150
- assert_search_syntax_error([ 'BEFORE', '99-Nov-2013' ])
151
- assert_search_syntax_error([ 'BEFORE', [ :group, '08-Nov-2013'] ])
157
+ assert_search_syntax_error([ 'BEFORE' ], /need for a search date/)
158
+ assert_search_syntax_error([ 'BEFORE', '99-Nov-2013' ], /search date is invalid/)
159
+ assert_search_syntax_error([ 'BEFORE', [ :group, '08-Nov-2013'] ], /search date string expected as <String> but was/)
152
160
  end
153
161
 
154
162
  def test_parse_body
@@ -186,8 +194,8 @@ Content-Type: text/html
186
194
  assert_search_cond(3, false) # ignored text part of multipart message.
187
195
  }
188
196
 
189
- assert_search_syntax_error([ 'BODY' ])
190
- assert_search_syntax_error([ 'BODY', [ :group, 'foo' ] ])
197
+ assert_search_syntax_error([ 'BODY' ], /need for a search string/)
198
+ assert_search_syntax_error([ 'BODY', [ :group, 'foo' ] ], /search string expected as <String> but was/)
191
199
  end
192
200
 
193
201
  def test_parse_cc
@@ -208,8 +216,8 @@ Content-Type: text/html
208
216
  assert_search_cond(2, false)
209
217
  }
210
218
 
211
- assert_search_syntax_error([ 'CC' ])
212
- assert_search_syntax_error([ 'CC', [ :group, 'foo' ] ])
219
+ assert_search_syntax_error([ 'CC' ], /need for a search string/)
220
+ assert_search_syntax_error([ 'CC', [ :group, 'foo' ] ], /search string expected as <String> but was/)
213
221
  end
214
222
 
215
223
  def test_parse_deleted
@@ -278,8 +286,8 @@ Content-Type: text/html
278
286
  assert_search_cond(2, false)
279
287
  }
280
288
 
281
- assert_search_syntax_error([ 'FROM' ])
282
- assert_search_syntax_error([ 'FROM', [ :group, 'foo' ] ])
289
+ assert_search_syntax_error([ 'FROM' ], /need for a search string/)
290
+ assert_search_syntax_error([ 'FROM', [ :group, 'foo' ] ], /search string expected as <String> but was/)
283
291
  end
284
292
 
285
293
  def test_parse_header
@@ -320,10 +328,10 @@ Content-Type: text/html
320
328
  assert_search_cond(2, false)
321
329
  }
322
330
 
323
- assert_search_syntax_error([ 'HEADER' ])
324
- assert_search_syntax_error([ 'HEADER', 'Received' ])
325
- assert_search_syntax_error([ 'HEADER', 'Received', [ :group, 'foo' ] ])
326
- assert_search_syntax_error([ 'HEADER', [ :group, 'Received' ], 'foo' ])
331
+ assert_search_syntax_error([ 'HEADER' ], /need for a search string/)
332
+ assert_search_syntax_error([ 'HEADER', 'Received' ], /need for a search string/)
333
+ assert_search_syntax_error([ 'HEADER', 'Received', [ :group, 'foo' ] ], /search string expected as <String> but was/)
334
+ assert_search_syntax_error([ 'HEADER', [ :group, 'Received' ], 'foo' ], /search string expected as <String> but was/)
327
335
  end
328
336
 
329
337
  def test_parse_keyword
@@ -336,8 +344,8 @@ Content-Type: text/html
336
344
  assert_search_cond(0, false) # always false
337
345
  }
338
346
 
339
- assert_search_syntax_error([ 'KEYWORD' ])
340
- assert_search_syntax_error([ 'KEYWORD', [ :group, 'foo' ] ])
347
+ assert_search_syntax_error([ 'KEYWORD' ], /need for a search string/)
348
+ assert_search_syntax_error([ 'KEYWORD', [ :group, 'foo' ] ], /search string expected as <String> but was/)
341
349
  end
342
350
 
343
351
  def test_parse_larger
@@ -354,9 +362,9 @@ Content-Type: text/html
354
362
  assert_search_cond(2, false)
355
363
  }
356
364
 
357
- assert_search_syntax_error([ 'LARGER' ])
358
- assert_search_syntax_error([ 'LARGER', [ :group, '3' ] ])
359
- assert_search_syntax_error([ 'LARGER', 'nonum' ])
365
+ assert_search_syntax_error([ 'LARGER' ], /need for a octet size/)
366
+ assert_search_syntax_error([ 'LARGER', [ :group, '3' ] ], /octet size is expected as numeric string but was/)
367
+ assert_search_syntax_error([ 'LARGER', 'nonum' ], /octet size is expected as numeric string but was/)
360
368
  end
361
369
 
362
370
  def test_parse_new
@@ -402,7 +410,7 @@ Content-Type: text/html
402
410
  assert_search_cond(2, true)
403
411
  }
404
412
 
405
- assert_search_syntax_error([ 'NOT' ])
413
+ assert_search_syntax_error([ 'NOT' ], 'unexpected end of search key.')
406
414
  end
407
415
 
408
416
  def test_parse_old
@@ -435,9 +443,9 @@ Content-Type: text/html
435
443
  assert_search_cond(2, false)
436
444
  }
437
445
 
438
- assert_search_syntax_error([ 'ON' ])
439
- assert_search_syntax_error([ 'ON', '99-Nov-2013' ])
440
- assert_search_syntax_error([ 'ON', [ :group, '08-Nov-2013'] ])
446
+ assert_search_syntax_error([ 'ON' ], /need for a search date/)
447
+ assert_search_syntax_error([ 'ON', '99-Nov-2013' ], /search date is invalid/)
448
+ assert_search_syntax_error([ 'ON', [ :group, '08-Nov-2013'] ], /search date string expected as <String> but was/)
441
449
  end
442
450
 
443
451
  def test_parse_or
@@ -464,8 +472,8 @@ Content-Type: text/html
464
472
 
465
473
  }
466
474
 
467
- assert_search_syntax_error([ 'OR' ])
468
- assert_search_syntax_error([ 'OR', 'ANSWERED' ])
475
+ assert_search_syntax_error([ 'OR' ], 'unexpected end of search key.')
476
+ assert_search_syntax_error([ 'OR', 'ANSWERED' ], 'unexpected end of search key.')
469
477
  end
470
478
 
471
479
  def test_parse_recent
@@ -522,9 +530,9 @@ Content-Type: text/html
522
530
  assert_search_cond(3, false)
523
531
  }
524
532
 
525
- assert_search_syntax_error([ 'SENTBEFORE' ])
526
- assert_search_syntax_error([ 'SENTBEFORE', '99-Nov-2013' ])
527
- assert_search_syntax_error([ 'SENTBEFORE', [ :group, '08-Nov-2013'] ])
533
+ assert_search_syntax_error([ 'SENTBEFORE' ], /need for a search date/)
534
+ assert_search_syntax_error([ 'SENTBEFORE', '99-Nov-2013' ], /search date is invalid/)
535
+ assert_search_syntax_error([ 'SENTBEFORE', [ :group, '08-Nov-2013'] ], /search date string expected as <String> but was/)
528
536
  end
529
537
 
530
538
  def test_parse_senton
@@ -549,9 +557,9 @@ Content-Type: text/html
549
557
  assert_search_cond(3, false)
550
558
  }
551
559
 
552
- assert_search_syntax_error([ 'SENTON' ])
553
- assert_search_syntax_error([ 'SENTON', '99-Nov-2013' ])
554
- assert_search_syntax_error([ 'SENTON', [ :group, '08-Nov-2013'] ])
560
+ assert_search_syntax_error([ 'SENTON' ], /need for a search date/)
561
+ assert_search_syntax_error([ 'SENTON', '99-Nov-2013' ], /search date is invalid/)
562
+ assert_search_syntax_error([ 'SENTON', [ :group, '08-Nov-2013'] ], /search date string expected as <String> but was/)
555
563
  end
556
564
 
557
565
  def test_parse_sentsince
@@ -576,9 +584,9 @@ Content-Type: text/html
576
584
  assert_search_cond(3, false)
577
585
  }
578
586
 
579
- assert_search_syntax_error([ 'SENTSINCE' ])
580
- assert_search_syntax_error([ 'SENTSINCE', '99-Nov-2013' ])
581
- assert_search_syntax_error([ 'SENTSINCE', [ :group, '08-Nov-2013'] ])
587
+ assert_search_syntax_error([ 'SENTSINCE' ], /need for a search date/)
588
+ assert_search_syntax_error([ 'SENTSINCE', '99-Nov-2013' ], /search date is invalid/)
589
+ assert_search_syntax_error([ 'SENTSINCE', [ :group, '08-Nov-2013'] ], /search date string expected as <String> but was/)
582
590
  end
583
591
 
584
592
  def test_parse_since
@@ -595,9 +603,9 @@ Content-Type: text/html
595
603
  assert_search_cond(2, true)
596
604
  }
597
605
 
598
- assert_search_syntax_error([ 'SINCE' ])
599
- assert_search_syntax_error([ 'SINCE', '99-Nov-2013' ])
600
- assert_search_syntax_error([ 'SINCE', [ :group, '08-Nov-2013'] ])
606
+ assert_search_syntax_error([ 'SINCE' ], /need for a search date/)
607
+ assert_search_syntax_error([ 'SINCE', '99-Nov-2013' ], /search date is invalid/)
608
+ assert_search_syntax_error([ 'SINCE', [ :group, '08-Nov-2013'] ], /search date string expected as <String> but was/)
601
609
  end
602
610
 
603
611
  def test_parse_smaller
@@ -614,9 +622,9 @@ Content-Type: text/html
614
622
  assert_search_cond(2, false)
615
623
  }
616
624
 
617
- assert_search_syntax_error([ 'SMALLER' ])
618
- assert_search_syntax_error([ 'SMALLER', [ :group, '3' ] ])
619
- assert_search_syntax_error([ 'SMALLER', 'nonum' ])
625
+ assert_search_syntax_error([ 'SMALLER' ], /need for a octet size/)
626
+ assert_search_syntax_error([ 'SMALLER', [ :group, '3' ] ], /octet size is expected as numeric string but was/)
627
+ assert_search_syntax_error([ 'SMALLER', 'nonum' ], /octet size is expected as numeric string but was/)
620
628
  end
621
629
 
622
630
  def test_parse_subject
@@ -637,8 +645,8 @@ Content-Type: text/html
637
645
  assert_search_cond(2, false)
638
646
  }
639
647
 
640
- assert_search_syntax_error([ 'SUBJECT' ])
641
- assert_search_syntax_error([ 'SUBJECT', [ :group, 'foo' ] ])
648
+ assert_search_syntax_error([ 'SUBJECT' ], /need for a search string/)
649
+ assert_search_syntax_error([ 'SUBJECT', [ :group, 'foo' ] ], /search string expected as <String> but was/)
642
650
  end
643
651
 
644
652
  def test_parse_text
@@ -663,8 +671,8 @@ Content-Type: text/html
663
671
  assert_search_cond(0, false)
664
672
  }
665
673
 
666
- assert_search_syntax_error([ 'TEXT' ])
667
- assert_search_syntax_error([ 'TEXT', [ :group, 'foo'] ])
674
+ assert_search_syntax_error([ 'TEXT' ], /need for a search string/)
675
+ assert_search_syntax_error([ 'TEXT', [ :group, 'foo'] ], /search string expected as <String> but was/)
668
676
  end
669
677
 
670
678
  def test_parse_to
@@ -685,8 +693,8 @@ Content-Type: text/html
685
693
  assert_search_cond(2, false)
686
694
  }
687
695
 
688
- assert_search_syntax_error([ 'TO' ])
689
- assert_search_syntax_error([ 'TO', [ :group, 'foo' ] ])
696
+ assert_search_syntax_error([ 'TO' ], /need for a search string/)
697
+ assert_search_syntax_error([ 'TO', [ :group, 'foo' ] ], /search string expected as <String> but was/)
690
698
  end
691
699
 
692
700
  def test_parse_uid
@@ -789,8 +797,8 @@ Content-Type: text/html
789
797
  assert_search_cond(0, true) # always true
790
798
  }
791
799
 
792
- assert_search_syntax_error([ 'UNKEYWORD' ])
793
- assert_search_syntax_error([ 'UNKEYWORD', [ :group, 'foo' ] ])
800
+ assert_search_syntax_error([ 'UNKEYWORD' ], /need for a search string/)
801
+ assert_search_syntax_error([ 'UNKEYWORD', [ :group, 'foo' ] ], /search string expected as <String> but was/)
794
802
  end
795
803
 
796
804
  def test_parse_unseen
@@ -827,7 +835,7 @@ Content-Type: text/html
827
835
  assert_search_cond(2, true)
828
836
  }
829
837
 
830
- assert_search_syntax_error([ 'detarame' ])
838
+ assert_search_syntax_error([ 'detarame' ], /unknown search key/)
831
839
  end
832
840
 
833
841
  def test_parse_group
@@ -860,7 +868,12 @@ Content-Type: text/html
860
868
  assert_search_cond(3, false)
861
869
  }
862
870
 
863
- assert_search_syntax_error([ [ :block, 'ANSWERED', 'FLAGGED' ] ])
871
+ assert_search_syntax_error([ [ :block, 'ANSWERED', 'FLAGGED' ] ], /unknown search key/)
872
+ end
873
+
874
+ def test_parse_unknown
875
+ make_search_parser{}
876
+ assert_search_syntax_error([ :detarame ], /unknown search key/)
864
877
  end
865
878
 
866
879
  def test_parse_charset_body
@@ -657,7 +657,7 @@ Content-Type: application/octet-stream
657
657
  'Reply-To' => 'Baz <baz@mail.example.com>',
658
658
  'To' => 'Alice <alice@mail.example.com>',
659
659
  'Cc' => 'Bob <bob@mail.example.com>',
660
- 'Bcc' => 'Kate <kate@mail.example.com>')
660
+ 'Bcc' => 'Kate <kate@mail.example.com>')
661
661
 
662
662
  assert_equal([ [ 'Foo', nil, 'foo', 'mail.example.com' ] ], @msg.from)
663
663
  assert_equal([ [ 'Bar', nil, 'bar', 'mail.example.com' ] ], @msg.sender)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rims
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - TOKI Yoshinori
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-18 00:00:00.000000000 Z
11
+ date: 2019-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -87,6 +87,7 @@ files:
87
87
  - bin/rims
88
88
  - lib/rims.rb
89
89
  - lib/rims/auth.rb
90
+ - lib/rims/channel.rb
90
91
  - lib/rims/cksum_kvs.rb
91
92
  - lib/rims/cmd.rb
92
93
  - lib/rims/daemon.rb
@@ -109,6 +110,7 @@ files:
109
110
  - load_test/Rakefile
110
111
  - rims.gemspec
111
112
  - test/test_auth.rb
113
+ - test/test_channel.rb
112
114
  - test/test_cksum_kvs.rb
113
115
  - test/test_config.rb
114
116
  - test/test_daemon_status_file.rb
@@ -153,6 +155,7 @@ specification_version: 4
153
155
  summary: RIMS is Ruby IMap Server
154
156
  test_files:
155
157
  - test/test_auth.rb
158
+ - test/test_channel.rb
156
159
  - test/test_cksum_kvs.rb
157
160
  - test/test_config.rb
158
161
  - test/test_daemon_status_file.rb