rims 0.2.1 → 0.2.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.
@@ -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