~rogpeppe/juju-core/313-jsoncodec-optional-log

« back to all changes in this revision

Viewing changes to rpc/jsoncodec/codec_test.go

  • Committer: Roger Peppe
  • Date: 2013-06-07 17:42:54 UTC
  • Revision ID: roger.peppe@canonical.com-20130607174254-heon1z7amdtxmd99
rpc/jsoncodec: s/LogMessages/SetLogging/

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
func (*suite) TestReadHeaderLogsRequests(c *C) {
83
83
        msg := `{"RequestId":1,"Type": "foo","Id": "id","Request":"frob","Params":{"X":"param"}}`
84
84
        codec := jsoncodec.New(&testConn{
85
 
                readMsgs: []string{msg},
 
85
                readMsgs: []string{msg, msg, msg},
86
86
        })
87
 
        codec.LogMessages()
 
87
        // Check that logging is off by default
88
88
        var h rpc.Header
89
89
        err := codec.ReadHeader(&h)
90
90
        c.Assert(err, IsNil)
91
 
        c.Assert(c.GetTestLog(), Matches, "(.|\n)*DEBUG rpc/jsoncodec: <- "+regexp.QuoteMeta(msg)+`\n(.|\n)*`)
 
91
        c.Assert(c.GetTestLog(), Matches, "")
 
92
 
 
93
        // Check that we see a log message when we switch logging on.
 
94
        codec.SetLogging(true)
 
95
        err = codec.ReadHeader(&h)
 
96
        c.Assert(err, IsNil)
 
97
        c.Assert(c.GetTestLog(), Matches, ".*DEBUG rpc/jsoncodec: <- "+regexp.QuoteMeta(msg)+`\n`)
 
98
 
 
99
        // Check that we can switch it off again
 
100
        codec.SetLogging(false)
 
101
        err = codec.ReadHeader(&h)
 
102
        c.Assert(err, IsNil)
 
103
        c.Assert(c.GetTestLog(), Matches, ".*DEBUG rpc/jsoncodec: <- "+regexp.QuoteMeta(msg)+`\n`)
92
104
}
93
105
 
94
106
func (*suite) TestWriteMessageLogsRequests(c *C) {
95
107
        codec := jsoncodec.New(&testConn{})
96
 
        codec.LogMessages()
97
108
        h := rpc.Header{
98
109
                RequestId: 1,
99
110
                Type:      "foo",
100
111
                Id:        "id",
101
112
                Request:   "frob",
102
113
        }
 
114
 
 
115
        // Check that logging is off by default
103
116
        err := codec.WriteMessage(&h, value{X: "param"})
104
117
        c.Assert(err, IsNil)
 
118
        c.Assert(c.GetTestLog(), Matches, "")
 
119
 
 
120
        // Check that we see a log message when we switch logging on.
 
121
        codec.SetLogging(true)
 
122
        err = codec.WriteMessage(&h, value{X: "param"})
 
123
        c.Assert(err, IsNil)
105
124
        msg := `{"RequestId":1,"Type":"foo","Id":"id","Request":"frob","Params":{"X":"param"}}`
106
 
        c.Logf("quotemeta: %s", regexp.QuoteMeta(msg))
107
 
        c.Assert(c.GetTestLog(), Matches, `(.|\n)*DEBUG rpc/jsoncodec: -> `+regexp.QuoteMeta(msg)+`\n(.|\n)*`)
 
125
        c.Assert(c.GetTestLog(), Matches, `.*DEBUG rpc/jsoncodec: -> `+regexp.QuoteMeta(msg)+`\n`)
 
126
 
 
127
        // Check that we can switch it off again
 
128
        codec.SetLogging(false)
 
129
        err = codec.WriteMessage(&h, value{X: "param"})
 
130
        c.Assert(err, IsNil)
 
131
        c.Assert(c.GetTestLog(), Matches, `.*DEBUG rpc/jsoncodec: -> `+regexp.QuoteMeta(msg)+`\n`)
 
132
}
 
133
 
 
134
func (*suite) TestConcurrentSetLoggingAndWrite(c *C) {
 
135
        // If log messages are not set atomically, this
 
136
        // test will fail when run under the race detector.
 
137
        codec := jsoncodec.New(&testConn{})
 
138
        done := make(chan struct{})
 
139
        go func() {
 
140
                codec.SetLogging(true)
 
141
                done <- struct{}{}
 
142
        }()
 
143
        h := rpc.Header{
 
144
                RequestId: 1,
 
145
                Type:      "foo",
 
146
                Id:        "id",
 
147
                Request:   "frob",
 
148
        }
 
149
        err := codec.WriteMessage(&h, value{X: "param"})
 
150
        c.Assert(err, IsNil)
 
151
        <-done
 
152
}
 
153
 
 
154
func (*suite) TestConcurrentSetLoggingAndRead(c *C) {
 
155
        // If log messages are not set atomically, this
 
156
        // test will fail when run under the race detector.
 
157
        msg := `{"RequestId":1,"Type": "foo","Id": "id","Request":"frob","Params":{"X":"param"}}`
 
158
        codec := jsoncodec.New(&testConn{
 
159
                readMsgs: []string{msg, msg, msg},
 
160
        })
 
161
        done := make(chan struct{})
 
162
        go func() {
 
163
                codec.SetLogging(true)
 
164
                done <- struct{}{}
 
165
        }()
 
166
        var h rpc.Header
 
167
        err := codec.ReadHeader(&h)
 
168
        c.Assert(err, IsNil)
 
169
        <-done
108
170
}
109
171
 
110
172
func (*suite) TestErrorAfterClose(c *C) {