File: dispatch_spec.cr

package info (click to toggle)
crystal 1.6.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 18,956 kB
  • sloc: javascript: 1,712; sh: 592; cpp: 541; makefile: 243; ansic: 119; python: 105; xml: 32
file content (57 lines) | stat: -rw-r--r-- 1,821 bytes parent folder | download
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
require "spec"
require "log"
require "../../support/retry"

class Log
  describe Dispatcher do
    it "create dispatcher from enum" do
      Dispatcher.for(:direct).should eq(DirectDispatcher)
      Dispatcher.for(:async).should be_a(AsyncDispatcher)
      Dispatcher.for(:sync).should be_a(SyncDispatcher)
    end
  end

  describe DirectDispatcher do
    it "dispatches entry" do
      backend = Log::MemoryBackend.new
      backend.dispatcher = DirectDispatcher
      backend.dispatch entry = Entry.new("source", :info, "message", Log::Metadata.empty, nil)
      backend.entries.size.should eq(1)
    end
  end

  describe SyncDispatcher do
    it "dispatches entry" do
      backend = Log::MemoryBackend.new
      backend.dispatcher = SyncDispatcher.new
      backend.dispatch entry = Entry.new("source", :info, "message", Log::Metadata.empty, nil)
      backend.entries.size.should eq(1)
    end
  end

  describe AsyncDispatcher do
    it "dispatches entry" do
      backend = Log::MemoryBackend.new
      backend.dispatcher = AsyncDispatcher.new
      backend.dispatch entry = Entry.new("source", :info, "message", Log::Metadata.empty, nil)
      retry { backend.entries.size.should eq(1) }
    end

    it "wait for entries to flush before closing" do
      backend = Log::MemoryBackend.new
      backend.dispatcher = AsyncDispatcher.new
      backend.dispatch entry = Entry.new("source", :info, "message", Log::Metadata.empty, nil)
      backend.close
      backend.entries.size.should eq(1)
    end

    it "can be closed twice" do
      backend = Log::MemoryBackend.new
      backend.dispatcher = AsyncDispatcher.new
      backend.dispatch entry = Entry.new("source", :info, "message", Log::Metadata.empty, nil)
      backend.close
      backend.close
      backend.entries.size.should eq(1)
    end
  end
end