blob: b6188e4dd7afc0b7226b6d300d8cdf29c4106563 [file] [log] [blame]
Jens Geyer5f9bdff2014-11-18 21:57:03 +01001/*
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 tests
21
22import (
23 "reflect"
24 "testing"
25 "thrifttest"
26)
27
28type ThriftTestDriver struct {
29 client thrifttest.ThriftTest
30 t *testing.T
31}
32
33func NewThriftTestDriver(t *testing.T, client thrifttest.ThriftTest) *ThriftTestDriver {
34 return &ThriftTestDriver{client, t}
35}
36
37func (p *ThriftTestDriver) Start() {
38 client := p.client
39 t := p.t
40
41 if client.TestVoid() != nil {
42 t.Fatal("TestVoid failed")
43 }
44
45 if r, err := client.TestString("Test"); r != "Test" || err != nil {
46 t.Fatal("TestString with simple text failed")
47 }
48
49 if r, err := client.TestString(""); r != "" || err != nil {
50 t.Fatal("TestString with empty text failed")
51 }
52
53 stringTest := "Afrikaans, Alemannisch, Aragonés, العربية, مصرى, " +
54 "Asturianu, Aymar aru, Azərbaycan, Башҡорт, Boarisch, Žemaitėška, " +
55 "Беларуская, Беларуская (тарашкевіца), Български, Bamanankan, " +
56 "বাংলা, Brezhoneg, Bosanski, Català, Mìng-dĕ̤ng-ngṳ̄, Нохчийн, " +
57 "Cebuano, ᏣᎳᎩ, Česky, Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ, Чӑвашла, Cymraeg, " +
58 "Dansk, Zazaki, ދިވެހިބަސް, Ελληνικά, Emiliàn e rumagnòl, English, " +
59 "Esperanto, Español, Eesti, Euskara, فارسی, Suomi, Võro, Føroyskt, " +
60 "Français, Arpetan, Furlan, Frysk, Gaeilge, 贛語, Gàidhlig, Galego, " +
61 "Avañe'ẽ, ગુજરાતી, Gaelg, עברית, हिन्दी, Fiji Hindi, Hrvatski, " +
62 "Kreyòl ayisyen, Magyar, Հայերեն, Interlingua, Bahasa Indonesia, " +
63 "Ilokano, Ido, Íslenska, Italiano, 日本語, Lojban, Basa Jawa, " +
64 "ქართული, Kongo, Kalaallisut, ಕನ್ನಡ, 한국어, Къарачай-Малкъар, " +
65 "Ripoarisch, Kurdî, Коми, Kernewek, Кыргызча, Latina, Ladino, " +
66 "Lëtzebuergesch, Limburgs, Lingála, ລາວ, Lietuvių, Latviešu, Basa " +
67 "Banyumasan, Malagasy, Македонски, മലയാളം, मराठी, مازِرونی, Bahasa " +
68 "Melayu, Nnapulitano, Nedersaksisch, नेपाल भाषा, Nederlands, ‪" +
69 "Norsk (nynorsk)‬, ‪Norsk (bokmål)‬, Nouormand, Diné bizaad, " +
70 "Occitan, Иронау, Papiamentu, Deitsch, Polski, پنجابی, پښتو, " +
71 "Norfuk / Pitkern, Português, Runa Simi, Rumantsch, Romani, Română, " +
72 "Русский, Саха тыла, Sardu, Sicilianu, Scots, Sámegiella, Simple " +
73 "English, Slovenčina, Slovenščina, Српски / Srpski, Seeltersk, " +
74 "Svenska, Kiswahili, தமிழ், తెలుగు, Тоҷикӣ, ไทย, Türkmençe, Tagalog, " +
75 "Türkçe, Татарча/Tatarça, Українська, اردو, Tiếng Việt, Volapük, " +
76 "Walon, Winaray, 吴语, isiXhosa, ייִדיש, Yorùbá, Zeêuws, 中文, " +
77 "Bân-lâm-gú, 粵語"
78
79 if r, err := client.TestString(stringTest); r != stringTest || err != nil {
80 t.Fatal("TestString with all languages failed")
81 }
82
83 specialCharacters := "quote: \" backslash:" +
84 " backspace: \b formfeed: \f newline: \n return: \r tab: " +
85 " now-all-of-them-together: '\\\b\n\r\t'" +
86 " now-a-bunch-of-junk: !@#$%&()(&%$#{}{}<><><" +
87 " char-to-test-json-parsing: ]] \"]] \\\" }}}{ [[[ "
88
89 if r, err := client.TestString(specialCharacters); r != specialCharacters || err != nil {
90 t.Fatal("TestString with specialCharacters failed")
91 }
92
93 if r, err := client.TestByte(1); r != 1 || err != nil {
94 t.Fatal("TestByte(1) failed")
95 }
96 if r, err := client.TestByte(0); r != 0 || err != nil {
97 t.Fatal("TestByte(0) failed")
98 }
99 if r, err := client.TestByte(-1); r != -1 || err != nil {
100 t.Fatal("TestByte(-1) failed")
101 }
102 if r, err := client.TestByte(-127); r != -127 || err != nil {
103 t.Fatal("TestByte(-127) failed")
104 }
105
106 if r, err := client.TestI32(-1); r != -1 || err != nil {
107 t.Fatal("TestI32(-1) failed")
108 }
109 if r, err := client.TestI32(1); r != 1 || err != nil {
110 t.Fatal("TestI32(1) failed")
111 }
112
113 if r, err := client.TestI64(-5); r != -5 || err != nil {
114 t.Fatal("TestI64(-5) failed")
115 }
116 if r, err := client.TestI64(5); r != 5 || err != nil {
117 t.Fatal("TestI64(5) failed")
118 }
119 if r, err := client.TestI64(-34359738368); r != -34359738368 || err != nil {
120 t.Fatal("TestI64(-34359738368) failed")
121 }
122
123 if r, err := client.TestDouble(-5.2098523); r != -5.2098523 || err != nil {
124 t.Fatal("TestDouble(-5.2098523) failed")
125 }
126 if r, err := client.TestDouble(-7.012052175215044); r != -7.012052175215044 || err != nil {
127 t.Fatal("TestDouble(-7.012052175215044) failed")
128 }
129
130 out := thrifttest.NewXtruct()
131 out.StringThing = "Zero"
132 out.ByteThing = 1
133 out.I32Thing = -3
134 out.I64Thing = 1000000
135 if r, err := client.TestStruct(out); !reflect.DeepEqual(r, out) || err != nil {
136 t.Fatal("TestStruct failed")
137 }
138
139 out2 := thrifttest.NewXtruct2()
140 out2.ByteThing = 1
141 out2.StructThing = out
142 out2.I32Thing = 5
143 if r, err := client.TestNest(out2); !reflect.DeepEqual(r, out2) || err != nil {
144 t.Fatal("TestNest failed")
145 }
146
147 mapout := make(map[int32]int32)
148 for i := int32(0); i < 5; i++ {
149 mapout[i] = i - 10
150 }
151 if r, err := client.TestMap(mapout); !reflect.DeepEqual(r, mapout) || err != nil {
152 t.Fatal("TestMap failed")
153 }
154
155 mapTestInput := map[string]string{
156 "a": "123", "a b": "with spaces ", "same": "same", "0": "numeric key",
157 "longValue": stringTest, stringTest: "long key",
158 }
159 if r, err := client.TestStringMap(mapTestInput); !reflect.DeepEqual(r, mapTestInput) || err != nil {
160 t.Fatal("TestStringMap failed")
161 }
162
163 setTestInput := map[int32]bool{1: true, 2: true, 3: true}
164 if r, err := client.TestSet(setTestInput); !reflect.DeepEqual(r, setTestInput) || err != nil {
165 t.Fatal("TestSet failed")
166 }
167
168 listTest := []int32{1, 2, 3}
169 if r, err := client.TestList(listTest); !reflect.DeepEqual(r, listTest) || err != nil {
170 t.Fatal("TestList failed")
171 }
172
173 if r, err := client.TestEnum(thrifttest.Numberz_ONE); r != thrifttest.Numberz_ONE || err != nil {
174 t.Fatal("TestEnum failed")
175 }
176
177 if r, err := client.TestTypedef(69); r != 69 || err != nil {
178 t.Fatal("TestTypedef failed")
179 }
180
181 mapMapTest := map[int32]map[int32]int32{
182 4: {1: 1, 2: 2, 3: 3, 4: 4},
183 -4: {-4: -4, -3: -3, -2: -2, -1: -1},
184 }
185 if r, err := client.TestMapMap(1); !reflect.DeepEqual(r, mapMapTest) || err != nil {
186 t.Fatal("TestMapMap failed")
187 }
188
189 crazyX1 := thrifttest.NewXtruct()
190 crazyX1.StringThing = "Goodbye4"
191 crazyX1.ByteThing = 4
192 crazyX1.I32Thing = 4
193 crazyX1.I64Thing = 4
194
195 crazyX2 := thrifttest.NewXtruct()
196 crazyX2.StringThing = "Hello2"
197 crazyX2.ByteThing = 2
198 crazyX2.I32Thing = 2
199 crazyX2.I64Thing = 2
200
201 crazy := thrifttest.NewInsanity()
202 crazy.UserMap = map[thrifttest.Numberz]thrifttest.UserId{5: 5, 8: 8}
203 crazy.Xtructs = []*thrifttest.Xtruct{crazyX1, crazyX2}
204
205 crazyEmpty := thrifttest.NewInsanity()
206 crazyEmpty.UserMap = map[thrifttest.Numberz]thrifttest.UserId{}
207 crazyEmpty.Xtructs = []*thrifttest.Xtruct{}
208
209 insanity := map[thrifttest.UserId]map[thrifttest.Numberz]*thrifttest.Insanity{
210 1: {thrifttest.Numberz_TWO: crazy, thrifttest.Numberz_THREE: crazy},
211 2: {thrifttest.Numberz_SIX: crazyEmpty},
212 }
213 if r, err := client.TestInsanity(crazy); !reflect.DeepEqual(r, insanity) || err != nil {
214 t.Fatal("TestInsanity failed")
215 }
216
217 if err := client.TestException("TException"); err == nil {
218 t.Fatal("TestException TException failed")
219 }
220
221 if err, ok := client.TestException("Xception").(*thrifttest.Xception); ok == false || err == nil {
222 t.Fatal("TestException Xception failed")
223 } else if err.ErrorCode != 1001 || err.Message != "Xception" {
224 t.Fatal("TestException Xception failed")
225 }
226
227 if err := client.TestException("no Exception"); err != nil {
228 t.Fatal("TestException no Exception failed")
229 }
230
231 if err := client.TestOneway(0); err != nil {
232 t.Fatal("TestOneway failed")
233 }
234}