kbus_http_test.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. package kbus_http
  2. import (
  3. "encoding/json"
  4. "io"
  5. "net/http"
  6. "os"
  7. "strings"
  8. "testing"
  9. "time"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/d0"
  11. . "gitp78su.ipnodns.ru/svi/kern/v4/d1"
  12. "gitp78su.ipnodns.ru/svi/kern/v4/d2/kern_ctx"
  13. "gitp78su.ipnodns.ru/svi/kern/v4/d2/kserv_http"
  14. "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/bus_ent/topic"
  15. "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/bus_mock/mock_hand_serve"
  16. "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/bus_mock/mock_hand_sub_local"
  17. "gitp78su.ipnodns.ru/svi/kern/v4/d2/lti/dot"
  18. )
  19. type tester struct {
  20. t *testing.T
  21. handSub *mock_hand_sub_local.MockHandlerSub
  22. handServ *mock_hand_serve.MockHandlerServe
  23. owner *d0.LOwner
  24. }
  25. const (
  26. test_uuid = "test_uuid"
  27. )
  28. var (
  29. qNameSub = topic.LetTopic("topic_sub")
  30. qNameServ = topic.LetTopic("topic_serv")
  31. )
  32. func TestKernelBusHttp(t *testing.T) {
  33. owner := d0.LetOwner(1, "test_kernel_bus_http")
  34. sf := &tester{
  35. owner: owner,
  36. t: t,
  37. handSub: mock_hand_sub_local.NewMockHandlerSub(qNameSub,
  38. d0.LetTxt("http://localhost:18200/bus/pub")),
  39. handServ: mock_hand_serve.NewMockHandlerServe(qNameServ, "name_serv"),
  40. }
  41. ctx := kern_ctx.GetKernCtx()
  42. ctx.Set(d0.LetTxt("monolitName"), "test_monolit", "comment")
  43. sf.get()
  44. sf.req()
  45. sf.sub()
  46. sf.pub()
  47. sf.unsub()
  48. }
  49. // Запрос на отписку.
  50. func (sf *tester) unsub() {
  51. sf.t.Log("unsub")
  52. sf.unsubBad1()
  53. sf.unsubBad2()
  54. sf.unsubGood1()
  55. sf.unsubBad3()
  56. sf.unsubGood2()
  57. }
  58. func (sf *tester) unsubGood2() {
  59. sf.t.Log("unsubGood2")
  60. res := Bus_.Subscribe(sf.handSub)
  61. if res.IsErr() {
  62. sf.t.Fatalf("unsubGood1(): err=%v", res.Err())
  63. }
  64. req := &dot.UnsubReq{
  65. HandlerName_: sf.handSub.Name().Get(),
  66. Uuid_: d0.LetTxt(test_uuid),
  67. }
  68. binReq, _ := json.MarshalIndent(req, "", " ")
  69. body := strings.NewReader(string(binReq))
  70. kServHttp := kserv_http.GetKernelServHttp()
  71. fibApp := kServHttp.Fiber()
  72. hReq, err := http.NewRequest(http.MethodPost, "/bus/unsub", body)
  73. if err != nil {
  74. sf.t.Fatalf("unsubGood2(): err=%v", err)
  75. }
  76. hReq.Header.Add("Content-Type", "application/json")
  77. _resp, err := fibApp.Test(hReq)
  78. if err != nil {
  79. sf.t.Fatalf("unsubGood2(): after request, err=%v", err)
  80. }
  81. defer func() {
  82. _ = _resp.Body.Close()
  83. }()
  84. if _resp.StatusCode != http.StatusOK {
  85. sf.t.Fatalf("unsubGood2(): statusCode(%v)!=200", _resp.StatusCode)
  86. }
  87. binBody, _ := io.ReadAll(_resp.Body)
  88. resp := &dot.UnsubResp{}
  89. err = json.Unmarshal(binBody, resp)
  90. if err != nil {
  91. sf.t.Fatalf("unsubGood2(): err=%v", err)
  92. }
  93. if resp.Status_.Get() != "ok" {
  94. sf.t.Fatalf("unsubGood2(): resp(%v)!='ok'", resp.Status_)
  95. }
  96. }
  97. // Кривой запрос.
  98. func (sf *tester) unsubBad3() {
  99. sf.t.Log("unsubBad3")
  100. req := "tra-la-la"
  101. binReq, _ := json.MarshalIndent(req, "", " ")
  102. body := strings.NewReader(string(binReq))
  103. kServHttp := kserv_http.GetKernelServHttp()
  104. fibApp := kServHttp.Fiber()
  105. hReq, err := http.NewRequest(http.MethodPost, "/bus/unsub", body)
  106. hReq.Header.Add("Content-Type", "application/json")
  107. if err != nil {
  108. sf.t.Fatalf("unsubBad3(): err=%v", err)
  109. }
  110. _resp, err := fibApp.Test(hReq)
  111. if err != nil {
  112. sf.t.Fatalf("unsubBad3(): after request, err=%v", err)
  113. }
  114. defer func() {
  115. _ = _resp.Body.Close()
  116. }()
  117. if _resp.StatusCode == http.StatusOK {
  118. sf.t.Fatalf("unsubBad3(): statusCode(%v)==200", _resp.StatusCode)
  119. }
  120. }
  121. func (sf *tester) unsubGood1() {
  122. sf.t.Log("unsubGood1")
  123. res := Bus_.Subscribe(sf.handSub)
  124. if res.IsErr() {
  125. sf.t.Fatalf("unsubGood1(): err=%v", res.Err())
  126. }
  127. count := 0
  128. for count < 100 {
  129. time.Sleep(time.Millisecond * 1)
  130. count++
  131. }
  132. req := &dot.UnsubReq{
  133. HandlerName_: sf.handSub.Name().Get(),
  134. Uuid_: d0.LetTxt(test_uuid),
  135. }
  136. resp := Bus_.processUnsubRequest(req)
  137. if resp.Status_.Get() != "ok" {
  138. sf.t.Fatalf("unsubGood1(): status(%v)!='ok'", resp.Status_)
  139. }
  140. }
  141. // Все поля на месте, нет подписчика.
  142. func (sf *tester) unsubBad2() {
  143. sf.t.Log("unsubBad2")
  144. Bus_.Unsubscribe(sf.handSub)
  145. count := 0
  146. for count < 100 {
  147. time.Sleep(time.Millisecond * 1)
  148. count++
  149. }
  150. req := &dot.UnsubReq{
  151. HandlerName_: sf.handSub.Name().Get(),
  152. Uuid_: d0.LetTxt(test_uuid),
  153. }
  154. resp := Bus_.processUnsubRequest(req)
  155. if resp.Status_.Get() == "ok" {
  156. sf.t.Fatalf("unsubBad2(): status(%v)=='ok'", resp.Status_)
  157. }
  158. }
  159. // Нет полей для процесса отписки.
  160. func (sf *tester) unsubBad1() {
  161. sf.t.Log("unsubBad1")
  162. defer func() {
  163. if _panic := recover(); _panic == nil {
  164. sf.t.Fatalf("unsubBad1(): panic==nil")
  165. }
  166. }()
  167. req := &dot.UnsubReq{}
  168. _ = Bus_.processUnsubRequest(req)
  169. }
  170. // Запрос на публикацию.
  171. func (sf *tester) pub() {
  172. sf.t.Log("pub")
  173. sf.pubBad1()
  174. sf.pubGood1()
  175. sf.pubBad2()
  176. sf.pubBad3()
  177. sf.pubGood2()
  178. }
  179. func (sf *tester) pubGood2() {
  180. sf.t.Log("pubGood2")
  181. req := &dot.PublishReq{
  182. Topic_: qNameSub.Get(),
  183. Uuid_: d0.LetTxt(test_uuid),
  184. BinMsg_: []byte("http_pub"),
  185. }
  186. binReq, _ := json.MarshalIndent(req, "", " ")
  187. body := strings.NewReader(string(binReq))
  188. kServHttp := kserv_http.GetKernelServHttp()
  189. fibApp := kServHttp.Fiber()
  190. hReq, err := http.NewRequest(http.MethodPost, "/bus/pub", body)
  191. hReq.Header.Add("Content-Type", "application/json")
  192. if err != nil {
  193. sf.t.Fatalf("pubGood2(): err=%v", err)
  194. }
  195. _resp, err := fibApp.Test(hReq)
  196. if err != nil {
  197. sf.t.Fatalf("pubGood2(): after request, err=%v", err)
  198. }
  199. defer func() {
  200. _ = _resp.Body.Close()
  201. }()
  202. if _resp.StatusCode != http.StatusOK {
  203. sf.t.Fatalf("pubGood2(): statusCode(%v)!=200", _resp.StatusCode)
  204. }
  205. binBody, _ := io.ReadAll(_resp.Body)
  206. resp := &dot.PublishResp{}
  207. err = json.Unmarshal(binBody, resp)
  208. if err != nil {
  209. sf.t.Fatalf("pubGood2(): err=%v", err)
  210. }
  211. if resp.Status_.Get() != "ok" {
  212. sf.t.Fatalf("pubGood2(): resp(%v)!='ok'", resp.Status_)
  213. }
  214. }
  215. // Кривой запрос.
  216. func (sf *tester) pubBad3() {
  217. sf.t.Log("pubBad3")
  218. req := "tra-la-la"
  219. binReq, _ := json.MarshalIndent(req, "", " ")
  220. body := strings.NewReader(string(binReq))
  221. kServHttp := kserv_http.GetKernelServHttp()
  222. fibApp := kServHttp.Fiber()
  223. hReq, err := http.NewRequest(http.MethodPost, "/bus/pub", body)
  224. hReq.Header.Add("Content-Type", "application/json")
  225. if err != nil {
  226. sf.t.Fatalf("pubBad3(): err=%v", err)
  227. }
  228. _resp, err := fibApp.Test(hReq)
  229. if err != nil {
  230. sf.t.Fatalf("pubBad3(): after request, err=%v", err)
  231. }
  232. defer func() {
  233. _ = _resp.Body.Close()
  234. }()
  235. if _resp.StatusCode == http.StatusOK {
  236. sf.t.Fatalf("pubBad3(): statusCode(%v)==200", _resp.StatusCode)
  237. }
  238. }
  239. // Что-то случилось внутри шины.
  240. func (sf *tester) pubBad2() {
  241. sf.t.Log("pubBad2")
  242. Bus_.IsWork_.Reset()
  243. defer Bus_.IsWork_.Set()
  244. req := &dot.PublishReq{
  245. Topic_: qNameSub.Get(),
  246. Uuid_: d0.LetTxt(test_uuid),
  247. BinMsg_: []byte("test_pub"),
  248. }
  249. resp := Bus_.processPublish(req)
  250. if resp.Status_.Get() == "ok" {
  251. sf.t.Fatalf("pubBad2(): status(%v)=='ok'", resp.Status_)
  252. }
  253. }
  254. // Все поля на месте.
  255. func (sf *tester) pubGood1() {
  256. sf.t.Log("pubGood1")
  257. res := Bus_.Subscribe(sf.handSub)
  258. if res.IsErr() {
  259. sf.t.Fatalf("pubGood1(): err=%v", res.Err())
  260. }
  261. req := &dot.PublishReq{
  262. Topic_: qNameSub.Get(),
  263. Uuid_: d0.LetTxt(test_uuid),
  264. BinMsg_: []byte("test_pub"),
  265. }
  266. _ = Bus_.processPublish(req)
  267. for {
  268. time.Sleep(time.Millisecond * 1)
  269. msg := sf.handSub.Msg()
  270. if msg.Get() != "" {
  271. break
  272. }
  273. }
  274. msg := sf.handSub.Msg()
  275. if msg.Get() != "test_pub" {
  276. sf.t.Fatalf("pubGood1(): msg(%v)!='test_pub'", msg)
  277. }
  278. }
  279. // Нет полей для процесса публикации.
  280. func (sf *tester) pubBad1() {
  281. sf.t.Log("pubBad1")
  282. defer func() {
  283. if _panic := recover(); _panic == nil {
  284. sf.t.Fatalf("pubBad1(): panic==nil")
  285. }
  286. }()
  287. req := &dot.PublishReq{}
  288. _ = Bus_.processPublish(req)
  289. }
  290. // Запрос подписки на топик.
  291. func (sf *tester) sub() {
  292. sf.t.Log("sub")
  293. sf.subBad1()
  294. sf.subBad2()
  295. sf.subGood1()
  296. sf.subBad3()
  297. sf.subGood2()
  298. }
  299. // Полный процесс подписки.
  300. func (sf *tester) subGood2() {
  301. sf.t.Log("subGood2")
  302. req := &dot.SubscribeReq{
  303. Topic_: qNameServ.Get(),
  304. Uuid_: d0.LetTxt(test_uuid),
  305. WebHook_: d0.LetTxt("http://localhost:18200/bus/pub/"),
  306. }
  307. binReq, _ := json.MarshalIndent(req, "", " ")
  308. body := strings.NewReader(string(binReq))
  309. kServHttp := kserv_http.GetKernelServHttp()
  310. fibApp := kServHttp.Fiber()
  311. hReq, err := http.NewRequest(http.MethodPost, "/bus/sub", body)
  312. hReq.Header.Add("Content-Type", "application/json")
  313. if err != nil {
  314. sf.t.Fatalf("subBad1(): err=%v", err)
  315. }
  316. _resp, err := fibApp.Test(hReq)
  317. if err != nil {
  318. sf.t.Fatalf("subBad1(): after request, err=%v", err)
  319. }
  320. defer func() {
  321. _ = _resp.Body.Close()
  322. }()
  323. if _resp.StatusCode != http.StatusOK {
  324. sf.t.Fatalf("subBad1(): statusCode(%v)!=200", _resp.StatusCode)
  325. }
  326. binBody, _ := io.ReadAll(_resp.Body)
  327. resp := &dot.SubscribeResp{}
  328. err = json.Unmarshal(binBody, resp)
  329. if err != nil {
  330. sf.t.Fatalf("subBad1(): err=%v", err)
  331. }
  332. if resp.Status_.Get() != "ok" {
  333. sf.t.Fatalf("subBad1(): resp(%v)!='ok'", resp.Status_)
  334. }
  335. }
  336. // Отключена базовая шина.
  337. func (sf *tester) subBad3() {
  338. sf.t.Log("subBad3")
  339. req := &dot.SubscribeReq{
  340. Topic_: qNameServ.Get(),
  341. Uuid_: d0.LetTxt(test_uuid),
  342. WebHook_: d0.LetTxt("http://localhost:18200/bus/pub/"),
  343. }
  344. defer func() {
  345. if _panic := recover(); _panic != nil {
  346. sf.t.Fatalf("subBad3(): panic!=nil")
  347. }
  348. }()
  349. // _bus := kernel_bus_base.GetKernelBusBase()
  350. Bus_.IsWork_.Reset()
  351. defer Bus_.IsWork_.Set()
  352. resp := Bus_.processSubscribe(req)
  353. if resp.Status_.Get() == "ok" {
  354. sf.t.Fatalf("subBad3(): resp==ok")
  355. }
  356. }
  357. // Проверка полей запроса в процессе подписки.
  358. func (sf *tester) subGood1() {
  359. sf.t.Log("subGood1")
  360. req := &dot.SubscribeReq{
  361. Topic_: qNameServ.Get(),
  362. Uuid_: d0.LetTxt(test_uuid),
  363. WebHook_: d0.LetTxt("http://localhost:18200/bus/"),
  364. }
  365. defer func() {
  366. if _panic := recover(); _panic != nil {
  367. sf.t.Fatalf("subGood1(): panic!=nil")
  368. }
  369. }()
  370. _ = Bus_.processSubscribe(req)
  371. }
  372. var (
  373. qNameEmpty = topic.LetTopic("")
  374. )
  375. // Проверка кривых полей запроса в процессе подписки.
  376. func (sf *tester) subBad2() {
  377. sf.t.Log("subBad2")
  378. req := &dot.SubscribeReq{
  379. Topic_: qNameEmpty.Get(),
  380. }
  381. defer func() {
  382. if _panic := recover(); _panic == nil {
  383. sf.t.Fatalf("subBad2(): panic==nil")
  384. }
  385. }()
  386. _ = Bus_.processSubscribe(req)
  387. }
  388. // Кривой запрос.
  389. func (sf *tester) subBad1() {
  390. sf.t.Log("subBad1")
  391. req := "tra-ta-ta"
  392. binReq, _ := json.MarshalIndent(req, "", " ")
  393. body := strings.NewReader(string(binReq))
  394. kServHttp := kserv_http.GetKernelServHttp()
  395. fibApp := kServHttp.Fiber()
  396. hReq, err := http.NewRequest(http.MethodPost, "/bus/sub", body)
  397. hReq.Header.Add("Content-Type", "application/json")
  398. if err != nil {
  399. sf.t.Fatalf("subBad1(): err=%v", err)
  400. }
  401. _resp, err := fibApp.Test(hReq)
  402. if err != nil {
  403. sf.t.Fatalf("subBad1(): after request, err=%v", err)
  404. }
  405. defer func() {
  406. _ = _resp.Body.Close()
  407. }()
  408. if _resp.StatusCode != http.StatusBadRequest {
  409. sf.t.Fatalf("subBad1(): statusCode(%v)!=400", _resp.StatusCode)
  410. }
  411. }
  412. // Входящий запрос.
  413. func (sf *tester) req() {
  414. sf.t.Log("req")
  415. sf.reqBad1()
  416. sf.reqBad2()
  417. sf.reqBad3()
  418. sf.reqGood1()
  419. sf.reqBad4()
  420. }
  421. // Что-то с обработчиком.
  422. func (sf *tester) reqBad4() {
  423. sf.t.Log("reqBad4")
  424. sf.handServ.IsBad_.Set()
  425. defer sf.handServ.IsBad_.Reset()
  426. req := &dot.ServeReq{
  427. Topic_: sf.handServ.Topic().Get(),
  428. Uuid_: d0.LetTxt(test_uuid),
  429. BinReq_: []byte("test_msg"),
  430. }
  431. binReq, _ := json.MarshalIndent(req, "", " ")
  432. body := strings.NewReader(string(binReq))
  433. kServHttp := kserv_http.GetKernelServHttp()
  434. fibApp := kServHttp.Fiber()
  435. hReq, err := http.NewRequest(http.MethodPost, "/bus/request", body)
  436. hReq.Header.Add("Content-Type", "application/json")
  437. if err != nil {
  438. sf.t.Fatalf("reqBad4(): err=%v", err)
  439. }
  440. _resp, err := fibApp.Test(hReq)
  441. if err != nil {
  442. sf.t.Fatalf("reqBad4(): after request, err=%v", err)
  443. }
  444. defer func() {
  445. _ = _resp.Body.Close()
  446. }()
  447. if _resp.StatusCode != http.StatusOK {
  448. sf.t.Fatalf("reqBad4(): statusCode(%v)!=200", _resp.StatusCode)
  449. }
  450. binBody, _ := io.ReadAll(_resp.Body)
  451. resp := &dot.ServeResp{}
  452. err = json.Unmarshal(binBody, resp)
  453. if err != nil {
  454. sf.t.Fatalf("reqBad4(): err=%v", err)
  455. }
  456. if resp.Status_.Get() == "ok" {
  457. sf.t.Fatalf("reqBad4(): status(%v)=='ok'", resp.Status_)
  458. }
  459. }
  460. func (sf *tester) reqGood1() {
  461. sf.t.Log("reqGood1")
  462. req := &dot.ServeReq{
  463. Topic_: sf.handServ.Topic().Get(),
  464. Uuid_: d0.LetTxt(test_uuid),
  465. BinReq_: []byte("test_msg"),
  466. }
  467. binReq, _ := json.MarshalIndent(req, "", " ")
  468. body := strings.NewReader(string(binReq))
  469. kServHttp := kserv_http.GetKernelServHttp()
  470. fibApp := kServHttp.Fiber()
  471. hReq, err := http.NewRequest(http.MethodPost, "/bus/request", body)
  472. hReq.Header.Add("Content-Type", "application/json")
  473. if err != nil {
  474. sf.t.Fatalf("reqGood1(): err=%v", err)
  475. }
  476. _resp, err := fibApp.Test(hReq)
  477. if err != nil {
  478. sf.t.Fatalf("reqGood1(): after request, err=%v", err)
  479. }
  480. if _resp.StatusCode != http.StatusOK {
  481. sf.t.Fatalf("reqGood1(): statusCode(%v)!=200", _resp.StatusCode)
  482. }
  483. defer func() {
  484. _ = _resp.Body.Close()
  485. }()
  486. binBody, _ := io.ReadAll(_resp.Body)
  487. resp := &dot.ServeResp{}
  488. err = json.Unmarshal(binBody, resp)
  489. if err != nil {
  490. sf.t.Fatalf("reqGood1(): err=%v", err)
  491. }
  492. if d0.Txt(resp.BinResp_) != "test_msg" {
  493. sf.t.Fatalf("reqGood1(): resp(%v)!='test_msg'", resp.BinResp_)
  494. }
  495. }
  496. var (
  497. qNameBad = topic.LetTopic("bad_topic")
  498. )
  499. // Нет такого топика для запросов.
  500. func (sf *tester) reqBad3() {
  501. sf.t.Log("reqBad3")
  502. req := &dot.ServeReq{
  503. Topic_: qNameBad.Get(),
  504. Uuid_: d0.LetTxt(test_uuid),
  505. BinReq_: []byte("test_msg"),
  506. }
  507. binReq, _ := json.MarshalIndent(req, "", " ")
  508. body := strings.NewReader(string(binReq))
  509. kServHttp := kserv_http.GetKernelServHttp()
  510. fibApp := kServHttp.Fiber()
  511. hReq, err := http.NewRequest(http.MethodPost, "/bus/request", body)
  512. if err != nil {
  513. sf.t.Fatalf("reqBad3(): err=%v", err)
  514. }
  515. resp, err := fibApp.Test(hReq)
  516. if err != nil {
  517. sf.t.Fatalf("reqBad3(): after request, err=%v", err)
  518. }
  519. defer func() {
  520. _ = resp.Body.Close()
  521. }()
  522. if resp.StatusCode != http.StatusBadRequest {
  523. sf.t.Fatalf("reqBad3(): statusCode(%v)!=400", resp.StatusCode)
  524. }
  525. }
  526. // Нет тела запроса.
  527. func (sf *tester) reqBad2() {
  528. sf.t.Log("reqBad1")
  529. body := strings.NewReader("test_msg")
  530. kServHttp := kserv_http.GetKernelServHttp()
  531. fibApp := kServHttp.Fiber()
  532. hReq, err := http.NewRequest(http.MethodPost, "/bus/request", body)
  533. if err != nil {
  534. sf.t.Fatalf("reqBad1(): err=%v", err)
  535. }
  536. resp, err := fibApp.Test(hReq)
  537. if err != nil {
  538. sf.t.Fatalf("reqBad1(): after request, err=%v", err)
  539. }
  540. defer func() {
  541. _ = resp.Body.Close()
  542. }()
  543. if resp.StatusCode != http.StatusBadRequest {
  544. sf.t.Fatalf("reqBad1(): statusCode(%v)!=400", resp.StatusCode)
  545. }
  546. }
  547. // Отсутствуют поля в запросе.
  548. func (sf *tester) reqBad1() {
  549. sf.t.Log("reqBad1")
  550. defer func() {
  551. if _panic := recover(); _panic == nil {
  552. sf.t.Fatalf("reqBad1(): panic==nil")
  553. }
  554. }()
  555. Bus_.processSendRequest(nil)
  556. }
  557. // Получает локальную шину.
  558. func (sf *tester) get() {
  559. sf.t.Log("get")
  560. _ = MakeEnv(sf.owner)
  561. _ = os.Unsetenv("LOCAL_HTTP_URL")
  562. _ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18312/")
  563. _ = GetKernelBusHttp()
  564. if Bus_ == nil {
  565. sf.t.Fatalf("get(): bus==nil")
  566. }
  567. _ = GetKernelBusHttp()
  568. Bus_.RegisterServe(sf.handServ).Hassert("get()")
  569. }