苏州瑞玛APS项目web后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1018 lines
25 KiB

  1. // Copyright (c) Shenyang Leading Edge Intelligent Technology Co., Ltd. All rights reserved.
  2. package rpc
  3. import (
  4. "errors"
  5. "fmt"
  6. "reflect"
  7. "strings"
  8. "testing"
  9. )
  10. const (
  11. float64v1 float64 = 1
  12. float64v2 float64 = 2
  13. float64v3 float64 = 3
  14. float64v4 float64 = 4
  15. float64v5 float64 = 5
  16. float64v6 float64 = 6
  17. float64v123 float64 = 123
  18. float64v123dot123 float64 = 123.123
  19. float64v456 float64 = 456
  20. float64v10086 float64 = 10086
  21. )
  22. type Parameter1 struct {
  23. StringValue1 string
  24. IntegerValue1 int
  25. BooleanValue1 bool
  26. }
  27. type TestService interface {
  28. ME1(string) error
  29. ME2(string) (string, error)
  30. M1(string) error
  31. M2(string, string) error
  32. M3(int) error
  33. M4(bool) error
  34. M5(string, int, bool) error
  35. M6(string, []int) error
  36. M7(int, []string) error
  37. M8([5]int, [4]string) error
  38. M9(*bool, *[2]string, *[]int) error
  39. M10(Parameter1, *Parameter1) error
  40. M11([]Parameter1) error
  41. M12(map[string]Parameter1) error
  42. }
  43. type TestImpl struct {
  44. err error
  45. stringValue1 string
  46. stringValue2 string
  47. integerValue1 int
  48. booleanValue1 bool
  49. integerSliceValue1 []int
  50. stringSliceValue1 []string
  51. integerArray5Value1 [5]int
  52. stringArray4Value1 [4]string
  53. boolPointer1 *bool
  54. stringArray2Pointer1 *[2]string
  55. integerSlicePointer1 *[]int
  56. structValue1 Parameter1
  57. structPointer1 *Parameter1
  58. structArray1 []Parameter1
  59. structMap1 map[string]Parameter1
  60. }
  61. func (impl *TestImpl) Clear() {
  62. impl.err = nil
  63. impl.stringValue1 = ""
  64. impl.stringValue2 = ""
  65. impl.integerValue1 = 0
  66. impl.booleanValue1 = false
  67. impl.integerSliceValue1 = nil
  68. impl.stringSliceValue1 = nil
  69. impl.integerArray5Value1 = [5]int{0, 0, 0, 0, 0}
  70. impl.stringArray4Value1 = [4]string{"", "", "", ""}
  71. impl.boolPointer1 = nil
  72. impl.stringArray2Pointer1 = nil
  73. impl.integerSlicePointer1 = nil
  74. }
  75. func (impl *TestImpl) ME1(p1 string) error {
  76. impl.stringValue1 = p1
  77. return impl.err
  78. }
  79. func (impl *TestImpl) ME2(p1 string) (string, error) {
  80. impl.stringValue1 = p1
  81. return "", impl.err
  82. }
  83. func (impl *TestImpl) M1(p1 string) error {
  84. impl.stringValue1 = p1
  85. return nil
  86. }
  87. func (impl *TestImpl) M2(p1 string, p2 string) error {
  88. impl.stringValue1 = p1
  89. impl.stringValue2 = p2
  90. return nil
  91. }
  92. func (impl *TestImpl) M3(p1 int) error {
  93. impl.integerValue1 = p1
  94. return nil
  95. }
  96. func (impl *TestImpl) M4(p1 bool) error {
  97. impl.booleanValue1 = p1
  98. return nil
  99. }
  100. func (impl *TestImpl) M5(p1 string, p2 int, p3 bool) error {
  101. impl.stringValue1 = p1
  102. impl.integerValue1 = p2
  103. impl.booleanValue1 = p3
  104. return nil
  105. }
  106. func (impl *TestImpl) M6(p1 string, p2 []int) error {
  107. impl.stringValue1 = p1
  108. impl.integerSliceValue1 = p2
  109. return nil
  110. }
  111. func (impl *TestImpl) M7(p1 int, p2 []string) error {
  112. impl.integerValue1 = p1
  113. impl.stringSliceValue1 = p2
  114. return nil
  115. }
  116. func (impl *TestImpl) M8(p1 [5]int, p2 [4]string) error {
  117. impl.integerArray5Value1 = p1
  118. impl.stringArray4Value1 = p2
  119. return nil
  120. }
  121. func (impl *TestImpl) M9(p1 *bool, p2 *[2]string, p3 *[]int) error {
  122. impl.boolPointer1 = p1
  123. impl.stringArray2Pointer1 = p2
  124. impl.integerSlicePointer1 = p3
  125. return nil
  126. }
  127. func (impl *TestImpl) M10(p1 Parameter1, p2 *Parameter1) error {
  128. impl.structValue1 = p1
  129. impl.structPointer1 = p2
  130. return nil
  131. }
  132. func (impl *TestImpl) M11(p1 []Parameter1) error {
  133. impl.structArray1 = p1
  134. return nil
  135. }
  136. func (impl *TestImpl) M12(p1 map[string]Parameter1) error {
  137. impl.structMap1 = p1
  138. return nil
  139. }
  140. var testImpl = &TestImpl{}
  141. var methodInvokerBuilder = &MethodInvokerBuilder{&ValueParserBuilder{}, map[reflect.Type]valueParser{}}
  142. func NewTestService() TestService {
  143. return testImpl
  144. }
  145. var serviceValue = reflect.ValueOf(testImpl)
  146. var serviceType = reflect.ValueOf(NewTestService).Type().Out(0)
  147. func getInvoker(methodName string) (Handler, error) {
  148. method, ok := serviceType.MethodByName(methodName)
  149. if !ok {
  150. return nil, errors.New(fmt.Sprintf("未找到方法!"))
  151. }
  152. serviceName := strings.ToLower(fmt.Sprintf("%s.%s", serviceType.Name(), methodName))
  153. methodInvoker, err := methodInvokerBuilder.buildMethodInvoker(serviceName, method.Type, serviceValue.MethodByName(methodName).Call)
  154. if err != nil {
  155. return nil, err
  156. }
  157. return methodInvoker, nil
  158. }
  159. func getInvokerMapping() (map[string]Handler, error) {
  160. mapping := make(map[string]Handler, serviceType.NumMethod())
  161. for i := 0; i < serviceType.NumMethod(); i++ {
  162. method := serviceType.Method(i)
  163. methodInvoker, err := getInvoker(method.Name)
  164. if err != nil {
  165. return nil, err
  166. }
  167. mapping[strings.ToLower(fmt.Sprintf("/testservice/%s", method.Name))] = methodInvoker
  168. }
  169. return mapping, nil
  170. }
  171. func TestError(t *testing.T) {
  172. invokerMapping, err := getInvokerMapping()
  173. if err != nil {
  174. t.Fatalf("意外错误:%s", err.Error())
  175. }
  176. {
  177. testImpl.Clear()
  178. testImpl.err = errors.New("error1")
  179. parameters := []interface{}{
  180. "small",
  181. }
  182. _, err := invokerMapping["/testservice/me1"].Process(parameters)
  183. if err != testImpl.err {
  184. t.Fatalf("意外错误:%s", err.Error())
  185. }
  186. }
  187. {
  188. testImpl.Clear()
  189. testImpl.err = errors.New("error2")
  190. parameters := []interface{}{
  191. "small",
  192. }
  193. _, err := invokerMapping["/testservice/me2"].Process(parameters)
  194. if err != testImpl.err {
  195. t.Fatalf("意外错误:%s", err.Error())
  196. }
  197. }
  198. }
  199. func TestParameterCount(t *testing.T) {
  200. invokerMapping, err := getInvokerMapping()
  201. if err != nil {
  202. t.Fatalf("意外错误:%s", err.Error())
  203. }
  204. {
  205. testImpl.Clear()
  206. parameters := []interface{}{
  207. "small",
  208. "big",
  209. }
  210. _, err := invokerMapping["/testservice/m1"].Process(parameters)
  211. if err == nil {
  212. t.Fatalf("意外的没有错误!")
  213. }
  214. if err.Error() != "参数长度错误!" {
  215. t.Fatalf("意外错误:%s", err.Error())
  216. }
  217. }
  218. }
  219. func TestString(t *testing.T) {
  220. invokerMapping, err := getInvokerMapping()
  221. if err != nil {
  222. t.Fatalf("意外错误:%s", err.Error())
  223. }
  224. {
  225. testImpl.Clear()
  226. parameters := []interface{}{
  227. "small",
  228. }
  229. _, err := invokerMapping["/testservice/m1"].Process(parameters)
  230. if err != nil {
  231. t.Fatalf("意外错误:%s", err.Error())
  232. }
  233. if testImpl.stringValue1 != "small" {
  234. t.Fatalf("stringValue1实际值为:%s", testImpl.stringValue1)
  235. }
  236. }
  237. {
  238. testImpl.Clear()
  239. parameters := []interface{}{
  240. "small",
  241. "big",
  242. }
  243. _, err := invokerMapping["/testservice/m2"].Process(parameters)
  244. if err != nil {
  245. t.Fatalf("意外错误:%s", err.Error())
  246. }
  247. if testImpl.stringValue1 != "small" {
  248. t.Fatalf("stringValue1实际值为:%s", testImpl.stringValue1)
  249. }
  250. if testImpl.stringValue2 != "big" {
  251. t.Fatalf("stringValue2实际值为:%s", testImpl.stringValue1)
  252. }
  253. }
  254. {
  255. testImpl.Clear()
  256. parameters := []interface{}{
  257. "small",
  258. nil,
  259. }
  260. _, err := invokerMapping["/testservice/m2"].Process(parameters)
  261. if err != nil {
  262. t.Fatalf("意外错误:%s", err.Error())
  263. }
  264. if testImpl.stringValue1 != "small" {
  265. t.Fatalf("stringValue1实际值为:%s", testImpl.stringValue1)
  266. }
  267. if testImpl.stringValue2 != "" {
  268. t.Fatalf("stringValue2实际值为:%s", testImpl.stringValue1)
  269. }
  270. }
  271. {
  272. testImpl.Clear()
  273. parameters := []interface{}{
  274. "small",
  275. []interface{}{},
  276. }
  277. _, err := invokerMapping["/testservice/m2"].Process(parameters)
  278. if err == nil {
  279. t.Fatal("意外没有错误!")
  280. }
  281. if err.Error() != "#2 无法解析!源类型:[]interface {},目标类型:String." {
  282. t.Fatalf("意外错误%s", err.Error())
  283. }
  284. }
  285. }
  286. func TestNumber(t *testing.T) {
  287. invokerMapping, err := getInvokerMapping()
  288. if err != nil {
  289. t.Fatalf("意外错误:%s", err.Error())
  290. }
  291. {
  292. testImpl.Clear()
  293. parameters := []interface{}{
  294. float64v123,
  295. }
  296. _, err := invokerMapping["/testservice/m3"].Process(parameters)
  297. if err != nil {
  298. t.Fatalf("意外错误:%s", err.Error())
  299. }
  300. if testImpl.integerValue1 != 123 {
  301. t.Fatalf("integerValue1实际值为:%d", testImpl.integerValue1)
  302. }
  303. }
  304. {
  305. testImpl.Clear()
  306. mapping := []interface{}{
  307. float64v123dot123,
  308. }
  309. _, err := invokerMapping["/testservice/m3"].Process(mapping)
  310. if err != nil {
  311. t.Fatalf("意外错误:%s", err.Error())
  312. }
  313. if testImpl.integerValue1 != 123 {
  314. t.Fatalf("integerValue1实际值为:%d", testImpl.integerValue1)
  315. }
  316. }
  317. }
  318. func TestBoolean(t *testing.T) {
  319. invokerMapping, err := getInvokerMapping()
  320. if err != nil {
  321. t.Fatalf("意外错误:%s", err.Error())
  322. }
  323. {
  324. testImpl.Clear()
  325. parameters := []interface{}{
  326. true,
  327. }
  328. _, err := invokerMapping["/testservice/m4"].Process(parameters)
  329. if err != nil {
  330. t.Fatalf("意外错误:%s", err.Error())
  331. }
  332. if !testImpl.booleanValue1 {
  333. t.Fatalf("booleanValue1实际值为:%t", testImpl.booleanValue1)
  334. }
  335. }
  336. {
  337. testImpl.Clear()
  338. parameters := []interface{}{
  339. false,
  340. }
  341. _, err := invokerMapping["/testservice/m4"].Process(parameters)
  342. if err != nil {
  343. t.Fatalf("意外错误:%s", err.Error())
  344. }
  345. if testImpl.booleanValue1 {
  346. t.Fatalf("booleanValue1实际值为:%t", testImpl.booleanValue1)
  347. }
  348. }
  349. }
  350. func TestSimpleValue(t *testing.T) {
  351. invokerMapping, err := getInvokerMapping()
  352. if err != nil {
  353. t.Fatalf("意外错误:%s", err.Error())
  354. }
  355. {
  356. testImpl.Clear()
  357. parameters := []interface{}{
  358. "small",
  359. float64v123,
  360. true,
  361. }
  362. _, err := invokerMapping["/testservice/m5"].Process(parameters)
  363. if err != nil {
  364. t.Fatalf("意外错误:%s", err.Error())
  365. }
  366. if testImpl.stringValue1 != "small" {
  367. t.Fatalf("stringValue1实际值为:%s", testImpl.stringValue1)
  368. }
  369. if testImpl.integerValue1 != 123 {
  370. t.Fatalf("integerValue1实际值为:%d", testImpl.integerValue1)
  371. }
  372. if !testImpl.booleanValue1 {
  373. t.Fatalf("booleanValue1实际值为:%t", testImpl.booleanValue1)
  374. }
  375. }
  376. }
  377. func TestSlice(t *testing.T) {
  378. invokerMapping, err := getInvokerMapping()
  379. if err != nil {
  380. t.Fatalf("意外错误:%s", err.Error())
  381. }
  382. {
  383. testImpl.Clear()
  384. parameters := []interface{}{
  385. "small",
  386. []interface{}{
  387. float64v1,
  388. float64v2,
  389. float64v3,
  390. },
  391. }
  392. _, err := invokerMapping["/testservice/m6"].Process(parameters)
  393. if err != nil {
  394. t.Fatalf("意外错误:%s", err.Error())
  395. }
  396. if testImpl.stringValue1 != "small" {
  397. t.Fatalf("stringValue1实际值为:%s", testImpl.stringValue1)
  398. }
  399. if len(testImpl.integerSliceValue1) != 3 {
  400. t.Fatalf("integerSliceValue1实际长度为:%d", len(testImpl.integerSliceValue1))
  401. }
  402. if testImpl.integerSliceValue1[0] != 1 {
  403. t.Fatalf("integerSliceValue1#0实际值为:%d", testImpl.integerSliceValue1[0])
  404. }
  405. if testImpl.integerSliceValue1[1] != 2 {
  406. t.Fatalf("integerSliceValue1#1实际值为:%d", testImpl.integerSliceValue1[1])
  407. }
  408. if testImpl.integerSliceValue1[2] != 3 {
  409. t.Fatalf("integerSliceValue1#2实际值为:%d", testImpl.integerSliceValue1[2])
  410. }
  411. }
  412. {
  413. testImpl.Clear()
  414. parameters := []interface{}{
  415. float64v10086,
  416. []interface{}{
  417. "small",
  418. "big",
  419. },
  420. }
  421. _, err := invokerMapping["/testservice/m7"].Process(parameters)
  422. if err != nil {
  423. t.Fatalf("意外错误:%s", err.Error())
  424. }
  425. if testImpl.integerValue1 != 10086 {
  426. t.Fatalf("stringValue1实际值为:%d", testImpl.integerValue1)
  427. }
  428. if len(testImpl.stringSliceValue1) != 2 {
  429. t.Fatalf("istringSliceValue1实际长度为:%d", len(testImpl.stringSliceValue1))
  430. }
  431. if testImpl.stringSliceValue1[0] != "small" {
  432. t.Fatalf("stringSliceValue1#0实际值为:%s", testImpl.stringSliceValue1[0])
  433. }
  434. if testImpl.stringSliceValue1[1] != "big" {
  435. t.Fatalf("stringSliceValue1#1实际值为:%s", testImpl.stringSliceValue1[1])
  436. }
  437. }
  438. }
  439. func TestArray(t *testing.T) {
  440. invokerMapping, err := getInvokerMapping()
  441. if err != nil {
  442. t.Fatalf("意外错误:%s", err.Error())
  443. }
  444. {
  445. testImpl.Clear()
  446. parameters := []interface{}{
  447. []interface{}{
  448. float64v5,
  449. float64v4,
  450. float64v3,
  451. float64v2,
  452. float64v1,
  453. },
  454. []interface{}{
  455. "A",
  456. "B",
  457. "C",
  458. "D",
  459. },
  460. }
  461. _, err := invokerMapping["/testservice/m8"].Process(parameters)
  462. if err != nil {
  463. t.Fatalf("意外错误:%s", err.Error())
  464. }
  465. if testImpl.integerArray5Value1[0] != 5 {
  466. t.Fatalf("integerArray5Value1#0实际值为:%d", testImpl.integerArray5Value1[0])
  467. }
  468. if testImpl.integerArray5Value1[1] != 4 {
  469. t.Fatalf("integerArray5Value1#1实际值为:%d", testImpl.integerArray5Value1[1])
  470. }
  471. if testImpl.integerArray5Value1[2] != 3 {
  472. t.Fatalf("integerArray5Value1#2实际值为:%d", testImpl.integerArray5Value1[2])
  473. }
  474. if testImpl.integerArray5Value1[3] != 2 {
  475. t.Fatalf("integerArray5Value1#3实际值为:%d", testImpl.integerArray5Value1[3])
  476. }
  477. if testImpl.integerArray5Value1[4] != 1 {
  478. t.Fatalf("integerArray5Value1#4实际值为:%d", testImpl.integerArray5Value1[4])
  479. }
  480. if testImpl.stringArray4Value1[0] != "A" {
  481. t.Fatalf("stringArray4Value1#1实际值为:%s", testImpl.stringArray4Value1[0])
  482. }
  483. if testImpl.stringArray4Value1[1] != "B" {
  484. t.Fatalf("stringArray4Value1#2实际值为:%s", testImpl.stringArray4Value1[1])
  485. }
  486. if testImpl.stringArray4Value1[2] != "C" {
  487. t.Fatalf("stringArray4Value1#3实际值为:%s", testImpl.stringArray4Value1[2])
  488. }
  489. if testImpl.stringArray4Value1[3] != "D" {
  490. t.Fatalf("stringArray4Value1#4实际值为:%s", testImpl.stringArray4Value1[3])
  491. }
  492. }
  493. {
  494. testImpl.Clear()
  495. parameters := []interface{}{
  496. []interface{}{
  497. float64v6,
  498. float64v5,
  499. float64v4,
  500. float64v3,
  501. float64v2,
  502. float64v1,
  503. },
  504. []interface{}{
  505. "A",
  506. "B",
  507. "C",
  508. "D",
  509. },
  510. }
  511. _, err := invokerMapping["/testservice/m8"].Process(parameters)
  512. if err == nil {
  513. t.Fatal("意外没有错误!")
  514. }
  515. if err.Error() != "#1 数组长度匹配!期望长度:5,实际长度:6." {
  516. t.Fatalf("意外错误%s", err.Error())
  517. }
  518. }
  519. }
  520. func TestPointer(t *testing.T) {
  521. invokerMapping, err := getInvokerMapping()
  522. if err != nil {
  523. t.Fatalf("意外错误:%s", err.Error())
  524. }
  525. {
  526. testImpl.Clear()
  527. parameters := []interface{}{
  528. []interface{}{
  529. float64v5,
  530. float64v4,
  531. float64v3,
  532. float64v2,
  533. float64v1,
  534. },
  535. []interface{}{
  536. "A",
  537. "B",
  538. "C",
  539. "D",
  540. },
  541. }
  542. _, err := invokerMapping["/testservice/m8"].Process(parameters)
  543. if err != nil {
  544. t.Fatalf("意外错误:%s", err.Error())
  545. }
  546. if testImpl.integerArray5Value1[0] != 5 {
  547. t.Fatalf("integerArray5Value1#0实际值为:%d", testImpl.integerArray5Value1[0])
  548. }
  549. if testImpl.integerArray5Value1[1] != 4 {
  550. t.Fatalf("integerArray5Value1#1实际值为:%d", testImpl.integerArray5Value1[1])
  551. }
  552. if testImpl.integerArray5Value1[2] != 3 {
  553. t.Fatalf("integerArray5Value1#2实际值为:%d", testImpl.integerArray5Value1[2])
  554. }
  555. if testImpl.integerArray5Value1[3] != 2 {
  556. t.Fatalf("integerArray5Value1#3实际值为:%d", testImpl.integerArray5Value1[3])
  557. }
  558. if testImpl.integerArray5Value1[4] != 1 {
  559. t.Fatalf("integerArray5Value1#4实际值为:%d", testImpl.integerArray5Value1[4])
  560. }
  561. if testImpl.stringArray4Value1[0] != "A" {
  562. t.Fatalf("stringArray4Value1#1实际值为:%s", testImpl.stringArray4Value1[0])
  563. }
  564. if testImpl.stringArray4Value1[1] != "B" {
  565. t.Fatalf("stringArray4Value1#2实际值为:%s", testImpl.stringArray4Value1[1])
  566. }
  567. if testImpl.stringArray4Value1[2] != "C" {
  568. t.Fatalf("stringArray4Value1#3实际值为:%s", testImpl.stringArray4Value1[2])
  569. }
  570. if testImpl.stringArray4Value1[3] != "D" {
  571. t.Fatalf("stringArray4Value1#4实际值为:%s", testImpl.stringArray4Value1[3])
  572. }
  573. }
  574. {
  575. testImpl.Clear()
  576. parameters := []interface{}{
  577. false,
  578. []interface{}{
  579. "A",
  580. "B",
  581. },
  582. []interface{}{
  583. float64v123,
  584. float64v456,
  585. },
  586. }
  587. _, err := invokerMapping["/testservice/m9"].Process(parameters)
  588. if err != nil {
  589. t.Fatalf("意外错误:%s", err.Error())
  590. }
  591. if testImpl.boolPointer1 == nil {
  592. t.Fatal("boolPointer1不应为空!")
  593. }
  594. if *testImpl.boolPointer1 {
  595. t.Fatalf("booleanValue1实际值为:%t", *testImpl.boolPointer1)
  596. }
  597. if testImpl.integerSlicePointer1 == nil {
  598. t.Fatal("integerSlicePointer1不应为空!")
  599. }
  600. stringArray2 := *testImpl.stringArray2Pointer1
  601. if stringArray2[0] != "A" {
  602. t.Fatalf("stringArray2Pointer1#0实际值为:%s", stringArray2[0])
  603. }
  604. if stringArray2[1] != "B" {
  605. t.Fatalf("stringArray2Pointer1#1实际值为:%s", stringArray2[1])
  606. }
  607. if testImpl.stringArray2Pointer1 == nil {
  608. t.Fatal("tringArray2Pointer1不应为空!")
  609. }
  610. integerSlic := *testImpl.integerSlicePointer1
  611. if integerSlic[0] != 123 {
  612. t.Fatalf("integerSlicePointer1#0实际值为:%d", integerSlic[0])
  613. }
  614. if integerSlic[1] != 456 {
  615. t.Fatalf("integerSlicePointer1#1实际值为:%d", integerSlic[1])
  616. }
  617. }
  618. }
  619. func TestNil(t *testing.T) {
  620. invokerMapping, err := getInvokerMapping()
  621. if err != nil {
  622. t.Fatalf("意外错误:%s", err.Error())
  623. }
  624. {
  625. testImpl.Clear()
  626. parameters := []interface{}{
  627. nil,
  628. []interface{}{
  629. "A",
  630. "B",
  631. },
  632. nil,
  633. }
  634. _, err := invokerMapping["/testservice/m9"].Process(parameters)
  635. if err != nil {
  636. t.Fatalf("意外错误:%s", err.Error())
  637. }
  638. if testImpl.boolPointer1 != nil {
  639. t.Fatal("boolPointer1应当为空!")
  640. }
  641. if testImpl.stringArray2Pointer1 == nil {
  642. t.Fatal("stringArray2Pointer1不应为空!")
  643. }
  644. stringArray2 := *testImpl.stringArray2Pointer1
  645. if stringArray2[0] != "A" {
  646. t.Fatalf("stringArray2Pointer1#0实际值为:%s", stringArray2[0])
  647. }
  648. if stringArray2[1] != "B" {
  649. t.Fatalf("stringArray2Pointer1#1实际值为:%s", stringArray2[1])
  650. }
  651. if testImpl.integerSlicePointer1 != nil {
  652. t.Fatal("integerSlicePointer1不应为空!")
  653. }
  654. }
  655. {
  656. testImpl.Clear()
  657. parameters := []interface{}{
  658. nil,
  659. []interface{}{
  660. "A",
  661. "B",
  662. },
  663. nil,
  664. }
  665. _, err := invokerMapping["/testservice/m9"].Process(parameters)
  666. if err != nil {
  667. t.Fatalf("意外错误:%s", err.Error())
  668. }
  669. if testImpl.boolPointer1 != nil {
  670. t.Fatal("boolPointer1应当为空!")
  671. }
  672. if testImpl.stringArray2Pointer1 == nil {
  673. t.Fatal("stringArray2Pointer1不应为空!")
  674. }
  675. stringArray2 := *testImpl.stringArray2Pointer1
  676. if stringArray2[0] != "A" {
  677. t.Fatalf("stringArray2Pointer1#0实际值为:%s", stringArray2[0])
  678. }
  679. if stringArray2[1] != "B" {
  680. t.Fatalf("stringArray2Pointer1#1实际值为:%s", stringArray2[1])
  681. }
  682. if testImpl.integerSlicePointer1 != nil {
  683. t.Fatal("integerSlicePointer1不应为空!")
  684. }
  685. }
  686. {
  687. testImpl.Clear()
  688. parameters := []interface{}{
  689. float64v10086,
  690. nil,
  691. }
  692. _, err := invokerMapping["/testservice/m7"].Process(parameters)
  693. if err != nil {
  694. t.Fatalf("意外错误:%s", err.Error())
  695. }
  696. if testImpl.integerValue1 != 10086 {
  697. t.Fatalf("stringValue1实际值为:%d", testImpl.integerValue1)
  698. }
  699. if testImpl.stringSliceValue1 != nil {
  700. t.Fatal("boolPointer1应当为空!")
  701. }
  702. }
  703. {
  704. testImpl.Clear()
  705. parameters := []interface{}{
  706. float64v10086,
  707. nil,
  708. }
  709. _, err := invokerMapping["/testservice/m7"].Process(parameters)
  710. if err != nil {
  711. t.Fatalf("意外错误:%s", err.Error())
  712. }
  713. if testImpl.integerValue1 != 10086 {
  714. t.Fatalf("stringValue1实际值为:%d", testImpl.integerValue1)
  715. }
  716. if testImpl.stringSliceValue1 != nil {
  717. t.Fatal("boolPointer1应当为空!")
  718. }
  719. }
  720. {
  721. testImpl.Clear()
  722. parameters := []interface{}{
  723. nil,
  724. }
  725. _, err := invokerMapping["/testservice/m4"].Process(parameters)
  726. if err == nil {
  727. t.Fatal("意外没有错误!")
  728. }
  729. if err.Error() != "#1 不能为空!" {
  730. t.Fatalf("意外错误%s", err.Error())
  731. }
  732. }
  733. {
  734. testImpl.Clear()
  735. parameters := []interface{}{
  736. nil,
  737. }
  738. _, err := invokerMapping["/testservice/m3"].Process(parameters)
  739. if err == nil {
  740. t.Fatal("意外没有错误!")
  741. }
  742. if err.Error() != "#1 不能为空!" {
  743. t.Fatalf("意外错误%s", err.Error())
  744. }
  745. }
  746. {
  747. testImpl.Clear()
  748. parameters := []interface{}{
  749. []interface{}{
  750. float64v5,
  751. float64v4,
  752. float64v3,
  753. float64v2,
  754. float64v1,
  755. },
  756. nil,
  757. }
  758. _, err := invokerMapping["/testservice/m8"].Process(parameters)
  759. if err == nil {
  760. t.Fatal("意外没有错误!")
  761. }
  762. if err.Error() != "#2 不能为空!" {
  763. t.Fatalf("意外错误%s", err.Error())
  764. }
  765. }
  766. }
  767. func TestStruct(t *testing.T) {
  768. invokerMapping, err := getInvokerMapping()
  769. if err != nil {
  770. t.Fatalf("意外错误:%s", err.Error())
  771. }
  772. {
  773. testImpl.Clear()
  774. parameters := []interface{}{
  775. map[string]interface{}{
  776. "StringValue1": "A",
  777. "IntegerValue1": float64v1,
  778. "BooleanValue1": true,
  779. },
  780. map[string]interface{}{
  781. "StringValue1": "B",
  782. "IntegerValue1": float64v2,
  783. "BooleanValue1": false,
  784. },
  785. }
  786. _, err := invokerMapping["/testservice/m10"].Process(parameters)
  787. if err != nil {
  788. t.Fatalf("意外错误:%s", err.Error())
  789. }
  790. if testImpl.structValue1.StringValue1 != "A" {
  791. t.Fatalf("structValue1.StringValue1实际值为:%s", testImpl.structValue1.StringValue1)
  792. }
  793. if testImpl.structValue1.IntegerValue1 != 1 {
  794. t.Fatalf("structValue1.IntegerValue1实际值为:%d", testImpl.structValue1.IntegerValue1)
  795. }
  796. if !testImpl.structValue1.BooleanValue1 {
  797. t.Fatalf("structValue1.BooleanValue1实际值为:%t", testImpl.structValue1.BooleanValue1)
  798. }
  799. if testImpl.structPointer1.StringValue1 != "B" {
  800. t.Fatalf("structPointer1.StringValue1实际值为:%s", testImpl.structPointer1.StringValue1)
  801. }
  802. if testImpl.structPointer1.IntegerValue1 != 2 {
  803. t.Fatalf("structPointer1.IntegerValue1实际值为:%d", testImpl.structPointer1.IntegerValue1)
  804. }
  805. if testImpl.structPointer1.BooleanValue1 {
  806. t.Fatalf("structPointer1.BooleanValue1实际值为:%t", testImpl.structPointer1.BooleanValue1)
  807. }
  808. }
  809. {
  810. testImpl.Clear()
  811. parameters := []interface{}{
  812. map[string]interface{}{
  813. "StringValue1": "A",
  814. "IntegerValue1": float64v1,
  815. "BooleanValue1": true,
  816. },
  817. nil,
  818. }
  819. _, err := invokerMapping["/testservice/m10"].Process(parameters)
  820. if err != nil {
  821. t.Fatalf("意外错误:%s", err.Error())
  822. }
  823. if testImpl.structValue1.StringValue1 != "A" {
  824. t.Fatalf("structValue1.StringValue1实际值为:%s", testImpl.structValue1.StringValue1)
  825. }
  826. if testImpl.structValue1.IntegerValue1 != 1 {
  827. t.Fatalf("structValue1.IntegerValue1实际值为:%d", testImpl.structValue1.IntegerValue1)
  828. }
  829. if !testImpl.structValue1.BooleanValue1 {
  830. t.Fatalf("structValue1.BooleanValue1实际值为:%t", testImpl.structValue1.BooleanValue1)
  831. }
  832. if testImpl.structPointer1 != nil {
  833. t.Fatal("structPointer1应当为空!")
  834. }
  835. }
  836. {
  837. testImpl.Clear()
  838. parameters := []interface{}{
  839. nil,
  840. map[string]interface{}{
  841. "StringValue1": "B",
  842. "IntegerValue1": float64v2,
  843. "BooleanValue1": false,
  844. },
  845. }
  846. _, err := invokerMapping["/testservice/m10"].Process(parameters)
  847. if err == nil {
  848. t.Fatal("意外没有错误!")
  849. }
  850. if err.Error() != "#1 不能为空!" {
  851. t.Fatalf("意外错误%s", err.Error())
  852. }
  853. }
  854. {
  855. testImpl.Clear()
  856. parameters := []interface{}{
  857. []interface{}{
  858. map[string]interface{}{
  859. "StringValue1": "A",
  860. "IntegerValue1": float64v1,
  861. "BooleanValue1": true,
  862. },
  863. map[string]interface{}{
  864. "StringValue1": "B",
  865. "IntegerValue1": float64v2,
  866. "BooleanValue1": false,
  867. },
  868. },
  869. }
  870. _, err := invokerMapping["/testservice/m11"].Process(parameters)
  871. if err != nil {
  872. t.Fatalf("意外错误:%s", err.Error())
  873. }
  874. if testImpl.structArray1 == nil {
  875. t.Fatal("structArray1不应为空!")
  876. }
  877. if len(testImpl.structArray1) != 2 {
  878. t.Fatalf("structArray1实际长度为:%d", len(testImpl.integerSliceValue1))
  879. }
  880. if testImpl.structArray1[0].StringValue1 != "A" {
  881. t.Fatalf("structArray1[0].StringValue1实际值为:%s", testImpl.structPointer1.StringValue1)
  882. }
  883. if testImpl.structArray1[0].IntegerValue1 != 1 {
  884. t.Fatalf("structArray1[0].IntegerValue1实际值为:%d", testImpl.structValue1.IntegerValue1)
  885. }
  886. if !testImpl.structArray1[0].BooleanValue1 {
  887. t.Fatalf("structArray1[0].BooleanValue1实际值为:%t", testImpl.structValue1.BooleanValue1)
  888. }
  889. if testImpl.structArray1[1].StringValue1 != "B" {
  890. t.Fatalf("structArray1[1].StringValue1实际值为:%s", testImpl.structPointer1.StringValue1)
  891. }
  892. if testImpl.structArray1[1].IntegerValue1 != 2 {
  893. t.Fatalf("structArray1[1].IntegerValue1实际值为:%d", testImpl.structPointer1.IntegerValue1)
  894. }
  895. if testImpl.structArray1[1].BooleanValue1 {
  896. t.Fatalf("structArray1[1].BooleanValue1实际值为:%t", testImpl.structPointer1.BooleanValue1)
  897. }
  898. }
  899. }
  900. func TestMap(t *testing.T) {
  901. invokerMapping, err := getInvokerMapping()
  902. if err != nil {
  903. t.Fatalf("意外错误:%s", err.Error())
  904. }
  905. {
  906. testImpl.Clear()
  907. parameters := []interface{}{
  908. map[string]interface{}{
  909. "key1": map[string]interface{}{
  910. "StringValue1": "A",
  911. "IntegerValue1": float64v1,
  912. "BooleanValue1": true,
  913. },
  914. "key2": map[string]interface{}{
  915. "StringValue1": "B",
  916. "IntegerValue1": float64v2,
  917. "BooleanValue1": false,
  918. },
  919. },
  920. }
  921. _, err := invokerMapping["/testservice/m12"].Process(parameters)
  922. if err != nil {
  923. t.Fatalf("意外错误:%s", err.Error())
  924. }
  925. if testImpl.structMap1 == nil {
  926. t.Fatal("structMap1不应为空!")
  927. }
  928. if len(testImpl.structMap1) != 2 {
  929. t.Fatalf("structMap1实际长度为:%d", len(testImpl.integerSliceValue1))
  930. }
  931. if testImpl.structMap1["key1"].StringValue1 != "A" {
  932. t.Fatalf("structMap1[\"key1\"].StringValue1实际值为:%s", testImpl.structPointer1.StringValue1)
  933. }
  934. if testImpl.structMap1["key1"].IntegerValue1 != 1 {
  935. t.Fatalf("structMap1[\"key1\"].IntegerValue1实际值为:%d", testImpl.structValue1.IntegerValue1)
  936. }
  937. if !testImpl.structMap1["key1"].BooleanValue1 {
  938. t.Fatalf("structMap1[\"key1\"].BooleanValue1实际值为:%t", testImpl.structValue1.BooleanValue1)
  939. }
  940. if testImpl.structMap1["key2"].StringValue1 != "B" {
  941. t.Fatalf("structMap1[\"key2\"].StringValue1实际值为:%s", testImpl.structPointer1.StringValue1)
  942. }
  943. if testImpl.structMap1["key2"].IntegerValue1 != 2 {
  944. t.Fatalf("structMap1[\"key2\"].IntegerValue1实际值为:%d", testImpl.structPointer1.IntegerValue1)
  945. }
  946. if testImpl.structMap1["key2"].BooleanValue1 {
  947. t.Fatalf("structMap1[\"key2\"].BooleanValue1实际值为:%t", testImpl.structPointer1.BooleanValue1)
  948. }
  949. }
  950. }