kbus_http_test.go 15 KB

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