kbus_http_test.go 15 KB

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