]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/thrift/lib/go/thrift/header_transport_test.go
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / jaegertracing / thrift / lib / go / thrift / header_transport_test.go
CommitLineData
f67539c2
TL
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20package thrift
21
22import (
23 "context"
24 "io"
25 "io/ioutil"
26 "testing"
27)
28
29func TestTHeaderHeadersReadWrite(t *testing.T) {
30 trans := NewTMemoryBuffer()
31 reader := NewTHeaderTransport(trans)
32 writer := NewTHeaderTransport(trans)
33
34 const key1 = "key1"
35 const value1 = "value1"
36 const key2 = "key2"
37 const value2 = "value2"
38 const payload1 = "hello, world1\n"
39 const payload2 = "hello, world2\n"
40
41 // Write
42 if err := writer.AddTransform(TransformZlib); err != nil {
43 t.Fatalf(
44 "writer.AddTransform(TransformZlib) returned error: %v",
45 err,
46 )
47 }
48 // Use double zlib to make sure that we close them in the right order.
49 if err := writer.AddTransform(TransformZlib); err != nil {
50 t.Fatalf(
51 "writer.AddTransform(TransformZlib) returned error: %v",
52 err,
53 )
54 }
55 if err := writer.AddTransform(TransformNone); err != nil {
56 t.Fatalf(
57 "writer.AddTransform(TransformNone) returned error: %v",
58 err,
59 )
60 }
61 writer.SetWriteHeader(key1, value1)
62 writer.SetWriteHeader(key2, value2)
63 if _, err := writer.Write([]byte(payload1)); err != nil {
64 t.Errorf("writer.Write returned error: %v", err)
65 }
66 if err := writer.Flush(context.Background()); err != nil {
67 t.Errorf("writer.Flush returned error: %v", err)
68 }
69 if _, err := writer.Write([]byte(payload2)); err != nil {
70 t.Errorf("writer.Write returned error: %v", err)
71 }
72 if err := writer.Flush(context.Background()); err != nil {
73 t.Errorf("writer.Flush returned error: %v", err)
74 }
75
76 // Read
77
78 // Make sure multiple calls to ReadFrame is fine.
79 if err := reader.ReadFrame(); err != nil {
80 t.Errorf("reader.ReadFrame returned error: %v", err)
81 }
82 if err := reader.ReadFrame(); err != nil {
83 t.Errorf("reader.ReadFrame returned error: %v", err)
84 }
85 read, err := ioutil.ReadAll(reader)
86 if err != nil {
87 t.Errorf("Read returned error: %v", err)
88 }
89 if err := reader.ReadFrame(); err != nil && err != io.EOF {
90 t.Errorf("reader.ReadFrame returned error: %v", err)
91 }
92 if string(read) != payload1+payload2 {
93 t.Errorf(
94 "Read content expected %q, got %q",
95 payload1+payload2,
96 read,
97 )
98 }
99 if prot := reader.Protocol(); prot != THeaderProtocolBinary {
100 t.Errorf(
101 "reader.Protocol() expected %d, got %d",
102 THeaderProtocolBinary,
103 prot,
104 )
105 }
106 if reader.clientType != clientHeaders {
107 t.Errorf(
108 "reader.clientType expected %d, got %d",
109 clientHeaders,
110 reader.clientType,
111 )
112 }
113 headers := reader.GetReadHeaders()
114 if len(headers) != 2 || headers[key1] != value1 || headers[key2] != value2 {
115 t.Errorf(
116 "reader.GetReadHeaders() expected size 2, actual content: %+v",
117 headers,
118 )
119 }
120}
121
122func TestTHeaderTransportNoDoubleWrapping(t *testing.T) {
123 trans := NewTMemoryBuffer()
124 orig := NewTHeaderTransport(trans)
125 wrapped := NewTHeaderTransport(orig)
126
127 if wrapped != orig {
128 t.Errorf("NewTHeaderTransport double wrapped THeaderTransport")
129 }
130}