苏州瑞玛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.

540 lines
16 KiB

  1. package container
  2. import (
  3. "errors"
  4. "fmt"
  5. "leit.com/LAPP_CHEERSSON_BACKEND/global"
  6. "reflect"
  7. "testing"
  8. )
  9. func TestServiceMethodInformation_New(t *testing.T) {
  10. methodName := "String"
  11. method, ok := testServiceType.MethodByName(methodName)
  12. if !ok {
  13. t.Fatalf("意外的没找到方法!")
  14. }
  15. serviceMethodInformation := NewServiceMethodInformation(&method)
  16. if serviceMethodInformation == nil {
  17. t.Fatalf("创建失败!")
  18. }
  19. if serviceMethodInformation.methodName != methodName {
  20. t.Fatalf("方法名设置错误!")
  21. }
  22. if serviceMethodInformation.methodType != method.Type {
  23. t.Fatalf("方法类型设置错误!")
  24. }
  25. if serviceMethodInformation.routerBuilder != nil {
  26. t.Fatalf("路由创建器设置错误!")
  27. }
  28. if serviceMethodInformation.callerBrokerBuilders == nil {
  29. t.Fatalf("调用器代理创建器列表设置错误!")
  30. }
  31. if len(serviceMethodInformation.callerBrokerBuilders) != 1 {
  32. t.Fatalf("调用器代理创建器列表数量错误!")
  33. }
  34. }
  35. func TestServiceMethodInformation_New_NullError(t *testing.T) {
  36. defer func() {
  37. if err := recover(); err != "方法类型不能为空!" {
  38. t.Fatalf("意外错误:%s", err)
  39. }
  40. }()
  41. _ = NewServiceMethodInformation(nil)
  42. t.Fatalf("意外的没有错误!")
  43. }
  44. func TestServiceMethodInformation_New_EmptyMethodName(t *testing.T) {
  45. defer func() {
  46. if err := recover(); err != "方法名不能为空!" {
  47. t.Fatalf("意外错误:%s", err)
  48. }
  49. }()
  50. method := reflect.Method{Name: "", Type: nil}
  51. _ = NewServiceMethodInformation(&method)
  52. t.Fatalf("意外的没有错误!")
  53. }
  54. func TestServiceMethodInformation_New_ReturnValuesCountError(t *testing.T) {
  55. methodName := "String2"
  56. method, ok := testServiceType.MethodByName(methodName)
  57. if !ok {
  58. t.Fatalf("意外的没找到方法!")
  59. }
  60. defer func() {
  61. if err := recover(); err != fmt.Sprintf("返回值数量错误! 返回值数量: %d", method.Type.NumOut()) {
  62. t.Fatalf("意外错误:%s", err)
  63. }
  64. }()
  65. _ = NewServiceMethodInformation(&method)
  66. t.Fatalf("意外的没有错误!")
  67. }
  68. func TestServiceMethodInformation_New_ReturnValueTypeError(t *testing.T) {
  69. methodName := "NoError"
  70. method, ok := testServiceType.MethodByName(methodName)
  71. if !ok {
  72. t.Fatalf("意外的没找到方法!")
  73. }
  74. defer func() {
  75. if err := recover(); err != fmt.Sprintf("最后一个返回值类型错误! 类型:%s", method.Type.Out(method.Type.NumOut()-1)) {
  76. t.Fatalf("意外错误:%s", err)
  77. }
  78. }()
  79. _ = NewServiceMethodInformation(&method)
  80. t.Fatalf("意外的没有错误!")
  81. }
  82. func TestServiceMethodInformation_MethodName(t *testing.T) {
  83. methodName := "String"
  84. method, ok := testServiceType.MethodByName(methodName)
  85. if !ok {
  86. t.Fatalf("意外的没找到方法!")
  87. }
  88. information := NewServiceMethodInformation(&method)
  89. information.methodName = methodName
  90. if information.MethodName() != methodName {
  91. t.Fatalf("方法名获取错误!")
  92. }
  93. }
  94. func TestServiceMethodInformation_MethodType(t *testing.T) {
  95. methodName := "String"
  96. method, ok := testServiceType.MethodByName(methodName)
  97. if !ok {
  98. t.Fatalf("意外的没找到方法!")
  99. }
  100. information := NewServiceMethodInformation(&method)
  101. information.methodType = method.Type
  102. if information.MethodType() != method.Type {
  103. t.Fatalf("方法类型获取错误!")
  104. }
  105. }
  106. func TestServiceMethodInformation_RouterBuilder(t *testing.T) {
  107. methodName := "String"
  108. method, ok := testServiceType.MethodByName(methodName)
  109. if !ok {
  110. t.Fatalf("意外的没找到方法!")
  111. }
  112. information := NewServiceMethodInformation(&method)
  113. testError := errors.New("TestError")
  114. var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
  115. return "", "", "", testError
  116. }
  117. information.routerBuilder = routerBuilder
  118. storedRouterBuilder := information.RouterBuilder()
  119. if storedRouterBuilder == nil {
  120. t.Fatalf("获取到的路由创建器不应为空!")
  121. }
  122. _, _, _, testError2 := storedRouterBuilder(nil, "", nil)
  123. if testError2 != testError {
  124. t.Fatalf("路由创建器获取错误!")
  125. }
  126. }
  127. func TestServiceMethodInformation_AppendBrokerBuilder(t *testing.T) {
  128. methodName := "String"
  129. method, ok := testServiceType.MethodByName(methodName)
  130. if !ok {
  131. t.Fatalf("意外的没找到方法!")
  132. }
  133. information := NewServiceMethodInformation(&method)
  134. if information == nil {
  135. t.Fatalf("没找到信息")
  136. }
  137. var callerBrokerBuilder CallerBrokerBuilder = new(TestCallerBrokerBuilderImplement)
  138. information.AppendBrokerBuilder(callerBrokerBuilder)
  139. expectedLength := 2
  140. if len(information.callerBrokerBuilders) != expectedLength {
  141. t.Fatalf("调用器代理创建器数量错误!预期:%d,实际:%d.", expectedLength, len(information.callerBrokerBuilders))
  142. }
  143. if information.callerBrokerBuilders[1] != callerBrokerBuilder {
  144. t.Fatalf("调用器代理创建器设置错误!")
  145. }
  146. }
  147. func TestServiceMethodInformation_AppendBrokerBuilder_NullError(t *testing.T) {
  148. methodName := "String"
  149. method, ok := testServiceType.MethodByName(methodName)
  150. if !ok {
  151. t.Fatalf("意外的没找到方法!")
  152. }
  153. information := NewServiceMethodInformation(&method)
  154. defer func() {
  155. if err := recover(); err != fmt.Sprintf("调用器代理创建器不能设置为空!") {
  156. t.Fatalf("意外错误:%s", err)
  157. }
  158. }()
  159. information.AppendBrokerBuilder(nil)
  160. t.Fatalf("意外的没有错误!")
  161. }
  162. func TestServiceMethodInformation_AppendBrokerBuilder_CheckError(t *testing.T) {
  163. methodName := "String"
  164. method, ok := testServiceType.MethodByName(methodName)
  165. if !ok {
  166. t.Fatalf("意外的没找到方法!")
  167. }
  168. information := NewServiceMethodInformation(&method)
  169. testError := errors.New("TestError")
  170. var callerBrokerBuilder CallerBrokerBuilder = &TestCallerBrokerBuilderImplementWithError{checkingError: testError}
  171. defer func() {
  172. if err := recover(); err != testError.Error() {
  173. t.Fatalf("意外错误:%s", err)
  174. }
  175. }()
  176. information.AppendBrokerBuilder(callerBrokerBuilder)
  177. t.Fatalf("意外的没有错误!")
  178. }
  179. func TestServiceMethodInformation_SetRouterBuilder(t *testing.T) {
  180. methodName := "String"
  181. method, ok := testServiceType.MethodByName(methodName)
  182. if !ok {
  183. t.Fatalf("意外的没找到方法!")
  184. }
  185. information := NewServiceMethodInformation(&method)
  186. testError := errors.New("TestError")
  187. var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
  188. return "", "", "", testError
  189. }
  190. information.SetRouterBuilder(routerBuilder)
  191. storedRouterBuilder := information.routerBuilder
  192. if storedRouterBuilder == nil {
  193. t.Fatalf("获取到的路由创建器不应为空!")
  194. }
  195. _, _, _, testError2 := storedRouterBuilder(nil, "", nil)
  196. if testError2 != testError {
  197. t.Fatalf("路由创建器获取错误!")
  198. }
  199. }
  200. func TestServiceMethodInformation_SetRouterBuilder_NullError(t *testing.T) {
  201. defer func() {
  202. if err := recover(); err != "路由创建器不能设置为空!" {
  203. t.Fatalf("意外错误:%s", err)
  204. }
  205. }()
  206. methodName := "String"
  207. method, ok := testServiceType.MethodByName(methodName)
  208. if !ok {
  209. t.Fatalf("意外的没找到方法!")
  210. }
  211. information := NewServiceMethodInformation(&method)
  212. information.SetRouterBuilder(nil)
  213. t.Fatalf("意外的没有错误!")
  214. }
  215. func TestServiceMethodInformation_SetRouterBuilder_RepeatedError(t *testing.T) {
  216. defer func() {
  217. if err := recover(); err != "已经设置路由创建器!" {
  218. t.Fatalf("意外错误:%s", err)
  219. }
  220. }()
  221. methodName := "String"
  222. method, ok := testServiceType.MethodByName(methodName)
  223. if !ok {
  224. t.Fatalf("意外的没找到方法!")
  225. }
  226. information := NewServiceMethodInformation(&method)
  227. testError := errors.New("TestError")
  228. var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
  229. return "", "", "", testError
  230. }
  231. information.SetRouterBuilder(routerBuilder)
  232. information.SetRouterBuilder(routerBuilder)
  233. t.Fatalf("意外的没有错误!")
  234. }
  235. func TestServiceMethodInformation_SetBuilders(t *testing.T) {
  236. methodName := "String"
  237. method, ok := testServiceType.MethodByName(methodName)
  238. if !ok {
  239. t.Fatalf("意外的没找到方法!")
  240. }
  241. information := NewServiceMethodInformation(&method)
  242. if information == nil {
  243. t.Fatalf("没找到信息")
  244. }
  245. if information.methodName != methodName {
  246. t.Fatalf("方法名设置错误!")
  247. }
  248. if information.MethodName() != methodName {
  249. t.Fatalf("方法名获取错误!")
  250. }
  251. if information.methodType != method.Type {
  252. t.Fatalf("方法类型设置错误!")
  253. }
  254. if information.MethodType() != method.Type {
  255. t.Fatalf("方法类型获取错误!")
  256. }
  257. testError := errors.New("TestError")
  258. var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
  259. return "", "", "", testError
  260. }
  261. var callerBrokerBuilder CallerBrokerBuilder = new(TestCallerBrokerBuilderImplement)
  262. builders := BuilderSet{routerBuilder, []CallerBrokerBuilder{callerBrokerBuilder}}
  263. information.SetBuilders(builders)
  264. if information.routerBuilder == nil {
  265. t.Fatalf("路由创建器不应为空!")
  266. }
  267. _, _, _, testError1 := information.routerBuilder(nil, "", nil)
  268. if testError1 != testError {
  269. t.Fatalf("路由创建器设置错误!")
  270. }
  271. expectedLength := 2
  272. if len(information.callerBrokerBuilders) != expectedLength {
  273. t.Fatalf("调用器代理创建器数量错误!预期:%d,实际:%d.", expectedLength, len(information.callerBrokerBuilders))
  274. }
  275. if information.callerBrokerBuilders[1] != callerBrokerBuilder {
  276. t.Fatalf("调用器代理创建器设置错误!")
  277. }
  278. }
  279. func TestServiceMethodInformation_SetBuilders_NullBrokerBuilderError(t *testing.T) {
  280. defer func() {
  281. if err := recover(); err != "调用器代理创建器不能设置为空!" {
  282. t.Fatalf("意外错误:%s", err)
  283. }
  284. }()
  285. methodName := "String"
  286. method, ok := testServiceType.MethodByName(methodName)
  287. if !ok {
  288. t.Fatalf("意外的没找到方法!")
  289. }
  290. information := NewServiceMethodInformation(&method)
  291. testError := errors.New("TestError")
  292. var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
  293. return "", "", "", testError
  294. }
  295. builders := BuilderSet{routerBuilder, []CallerBrokerBuilder{nil}}
  296. information.SetBuilders(builders)
  297. t.Fatalf("意外的没有错误!")
  298. }
  299. func TestServiceMethodInformation_SetBuilders_MethodCheckError(t *testing.T) {
  300. methodName := "String"
  301. method, ok := testServiceType.MethodByName(methodName)
  302. if !ok {
  303. t.Fatalf("意外的没找到方法!")
  304. }
  305. information := NewServiceMethodInformation(&method)
  306. testError := errors.New("TestError")
  307. var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
  308. return "", "", "", testError
  309. }
  310. var callerBrokerBuilder CallerBrokerBuilder = &TestCallerBrokerBuilderImplementWithError{checkingError: testError}
  311. builders := BuilderSet{routerBuilder, []CallerBrokerBuilder{callerBrokerBuilder}}
  312. defer func() {
  313. if err := recover(); err != testError.Error() {
  314. t.Fatalf("意外错误:%s", err)
  315. }
  316. }()
  317. information.SetBuilders(builders)
  318. t.Fatalf("意外的没有错误!")
  319. }
  320. func TestServiceMethodInformation_SetBuilders_NullRouterBuilderError(t *testing.T) {
  321. defer func() {
  322. if err := recover(); err != "路由创建器不能设置为空!" {
  323. t.Fatalf("意外错误:%s", err)
  324. }
  325. }()
  326. methodName := "String"
  327. method, ok := testServiceType.MethodByName(methodName)
  328. if !ok {
  329. t.Fatalf("意外的没找到方法!")
  330. }
  331. information := NewServiceMethodInformation(&method)
  332. builders := BuilderSet{nil, nil}
  333. information.SetBuilders(builders)
  334. t.Fatalf("意外的没有错误!")
  335. }
  336. func TestServiceMethodInformation_SetBuilders_RepeatedRouterBuilderError(t *testing.T) {
  337. defer func() {
  338. if err := recover(); err != "已经设置路由创建器!" {
  339. t.Fatalf("意外错误:%s", err)
  340. }
  341. }()
  342. methodName := "String"
  343. method, ok := testServiceType.MethodByName(methodName)
  344. if !ok {
  345. t.Fatalf("意外的没找到方法!")
  346. }
  347. information := NewServiceMethodInformation(&method)
  348. testError := errors.New("TestError")
  349. var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
  350. return "", "", "", testError
  351. }
  352. builders := BuilderSet{routerBuilder, nil}
  353. information.SetBuilders(builders)
  354. information.SetBuilders(builders)
  355. t.Fatalf("意外的没有错误!")
  356. }
  357. func TestServiceMethodInformation_BuildHandler(t *testing.T) {
  358. methodName := "String"
  359. method, ok := testServiceType.MethodByName(methodName)
  360. if !ok {
  361. t.Fatalf("意外的没找到方法!")
  362. }
  363. information := NewServiceMethodInformation(&method)
  364. userId := "userId"
  365. user := &global.User{UserId: userId}
  366. sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
  367. if err != nil {
  368. t.Fatalf("意外错误:%s", err.Error())
  369. }
  370. handler, err := information.BuildHandler(sessionContext, serviceInstance)
  371. if err != nil {
  372. t.Fatalf("意外错误:%s", err.Error())
  373. }
  374. if handler == nil {
  375. t.Fatalf("创建句柄错误!")
  376. }
  377. }
  378. func TestServiceMethodInformation_BuildHandler_NullSession(t *testing.T) {
  379. methodName := "String"
  380. method, ok := testServiceType.MethodByName(methodName)
  381. if !ok {
  382. t.Fatalf("意外的没找到方法!")
  383. }
  384. information := NewServiceMethodInformation(&method)
  385. _, err := information.BuildHandler(nil, serviceInstance)
  386. if err == nil {
  387. t.Fatalf("会话不能为空!")
  388. }
  389. if err.Error() != fmt.Sprintf("会话上下文不能为空!") {
  390. t.Fatalf("意外错误:%s", err.Error())
  391. }
  392. }
  393. func TestServiceMethodInformation_BuildHandler_EmptyMethodNameError(t *testing.T) {
  394. methodName := "String"
  395. method, ok := testServiceType.MethodByName(methodName)
  396. if !ok {
  397. t.Fatalf("意外的没找到方法!")
  398. }
  399. information := NewServiceMethodInformation(&method)
  400. userId := "userId"
  401. user := &global.User{UserId: userId}
  402. sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
  403. if err != nil {
  404. t.Fatalf("意外错误:%s", err.Error())
  405. }
  406. information.methodName = ""
  407. _, err = information.BuildHandler(sessionContext, serviceInstance)
  408. if err == nil {
  409. t.Fatalf("意外的没有错误!")
  410. }
  411. if err.Error() != fmt.Sprintf("方法名不能为空!") {
  412. t.Fatalf("意外错误:%s", err.Error())
  413. }
  414. }
  415. func TestServiceMethodInformation_BuildHandler_MissingMethodError(t *testing.T) {
  416. methodName := "String"
  417. method, ok := testServiceType.MethodByName(methodName)
  418. if !ok {
  419. t.Fatalf("意外的没找到方法!")
  420. }
  421. information := NewServiceMethodInformation(&method)
  422. userId := "userId"
  423. user := &global.User{UserId: userId}
  424. sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
  425. if err != nil {
  426. t.Fatalf("意外错误:%s", err.Error())
  427. }
  428. information.methodName = ""
  429. information.methodName = "NoMethod"
  430. _, err = information.BuildHandler(sessionContext, serviceInstance)
  431. if err == nil {
  432. t.Fatalf("意外的没有错误!")
  433. }
  434. if err.Error() != fmt.Sprintf("未找到方法!") {
  435. t.Fatalf("意外错误:%s", err.Error())
  436. }
  437. }
  438. func TestServiceMethodInformation_BuildHandler_BrokerBuildError(t *testing.T) {
  439. methodName := "String"
  440. method, ok := testServiceType.MethodByName(methodName)
  441. if !ok {
  442. t.Fatalf("意外的没找到方法!")
  443. }
  444. information := NewServiceMethodInformation(&method)
  445. testError := errors.New("TestError")
  446. var callerBrokerBuilder CallerBrokerBuilder = &TestCallerBrokerBuilderImplementWithError{buildingError: testError}
  447. information.AppendBrokerBuilder(callerBrokerBuilder)
  448. userId := "userId"
  449. user := &global.User{UserId: userId}
  450. sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
  451. if err != nil {
  452. t.Fatalf("意外错误:%s", err.Error())
  453. }
  454. _, err = information.BuildHandler(sessionContext, serviceInstance)
  455. if err == nil {
  456. t.Fatalf("意外的没有错误!")
  457. }
  458. if err != testError {
  459. t.Fatalf("意外错误:%s", err.Error())
  460. }
  461. }
  462. func TestServiceMethodInformation_BuildHandler_NullCallerError(t *testing.T) {
  463. methodName := "String"
  464. method, ok := testServiceType.MethodByName(methodName)
  465. if !ok {
  466. t.Fatalf("意外的没找到方法!")
  467. }
  468. information := NewServiceMethodInformation(&method)
  469. var callerBrokerBuilder CallerBrokerBuilder = new(TestCallerBrokerBuilderImplementWithError)
  470. information.AppendBrokerBuilder(callerBrokerBuilder)
  471. userId := "userId"
  472. user := &global.User{UserId: userId}
  473. sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
  474. if err != nil {
  475. t.Fatalf("意外错误:%s", err.Error())
  476. }
  477. _, err = information.BuildHandler(sessionContext, serviceInstance)
  478. if err == nil {
  479. t.Fatalf("意外的没有错误!")
  480. }
  481. if err.Error() != fmt.Sprintf("第2个调用器不能为空!") {
  482. t.Fatalf("意外错误:%s", err.Error())
  483. }
  484. }