main_test.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/spf13/cast"
  6. "io"
  7. "net"
  8. "net/http"
  9. "net/http/cookiejar"
  10. "os"
  11. "pmail/db"
  12. "pmail/dto/response"
  13. "pmail/models"
  14. "pmail/services/setup"
  15. "pmail/signal"
  16. "strconv"
  17. "strings"
  18. "testing"
  19. "time"
  20. )
  21. var httpClient *http.Client
  22. const TestPort = 17888
  23. var TestHost string = "http://127.0.0.1:" + cast.ToString(TestPort)
  24. func TestMain(m *testing.M) {
  25. cookeieJar, err := cookiejar.New(nil)
  26. if err != nil {
  27. panic(err)
  28. }
  29. httpClient = &http.Client{Jar: cookeieJar, Timeout: 5 * time.Minute}
  30. os.Remove("config/config.json")
  31. os.Remove("config/pmail_temp.db")
  32. go func() {
  33. main()
  34. }()
  35. time.Sleep(3 * time.Second)
  36. m.Run()
  37. signal.StopChan <- true
  38. time.Sleep(3 * time.Second)
  39. }
  40. func TestMaster(t *testing.T) {
  41. t.Run("TestPort", testPort)
  42. t.Run("testDataBaseSet", testDataBaseSet)
  43. t.Run("testPwdSet", testPwdSet)
  44. t.Run("testDomainSet", testDomainSet)
  45. t.Run("testDNSSet", testDNSSet)
  46. cfg, err := setup.ReadConfig()
  47. if err != nil {
  48. t.Fatal(err)
  49. }
  50. cfg.HttpsEnabled = 2
  51. cfg.HttpPort = TestPort
  52. err = setup.WriteConfig(cfg)
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. t.Run("testSSLSet", testSSLSet)
  57. time.Sleep(3 * time.Second)
  58. t.Run("testLogin", testLogin) // 登录管理员账号
  59. t.Run("testCreateUser", testCreateUser) // 创建3个测试用户
  60. t.Run("testEditUser", testEditUser) // 编辑user2,封禁user3
  61. t.Run("testSendEmail", testSendEmail)
  62. time.Sleep(3 * time.Second)
  63. t.Run("testEmailList", testEmailList)
  64. t.Run("testDelEmail", testDelEmail)
  65. t.Run("testSendEmail2User1", testSendEmail2User1)
  66. t.Run("testSendEmail2User2", testSendEmail2User2)
  67. t.Run("testSendEmail2User3", testSendEmail2User3)
  68. time.Sleep(8 * time.Second)
  69. t.Run("testLoginUser3", testLoginUser3) // 测试登录被封禁账号
  70. t.Run("testLoginUser2", testLoginUser2) // 测试登录普通账号
  71. t.Run("testUser2EmailList", testUser2EmailList)
  72. // 创建group
  73. t.Run("testCreateGroup", testCreateGroup)
  74. // 创建rule
  75. t.Run("testCreateRule", testCreateRule)
  76. // 再次发邮件
  77. t.Run("testMoverEmailSend", testSendEmail2User2ForMove)
  78. time.Sleep(3 * time.Second)
  79. // 检查规则执行
  80. t.Run("testCheckRule", testCheckRule)
  81. time.Sleep(3 * time.Second)
  82. }
  83. func testCheckRule(t *testing.T) {
  84. var ue models.UserEmail
  85. db.Instance.Where("group_id!=0").Get(&ue)
  86. if ue.GroupId == 0 {
  87. t.Error("邮件规则执行失败!")
  88. }
  89. }
  90. func testCreateRule(t *testing.T) {
  91. ret, err := httpClient.Post(TestHost+"/api/rule/add", "application/json", strings.NewReader(`{
  92. "name":"Move Group",
  93. "rules":[{"field":"Subject","type":"contains","rule":"Move"}],
  94. "action":4,
  95. "params":"1",
  96. "sort":1
  97. }`))
  98. if err != nil {
  99. t.Error(err)
  100. }
  101. data, err := readResponse(ret.Body)
  102. if err != nil {
  103. t.Error(err)
  104. }
  105. if data.ErrorNo != 0 {
  106. t.Error("CreateRule Api Error!", data)
  107. }
  108. ret, err = httpClient.Post(TestHost+"/api/rule/get", "application/json", strings.NewReader(`{}`))
  109. if err != nil {
  110. t.Error(err)
  111. }
  112. data, err = readResponse(ret.Body)
  113. if err != nil {
  114. t.Error(err)
  115. }
  116. if data.ErrorNo != 0 {
  117. t.Error("CreateRule Api Error!", data)
  118. }
  119. dt := data.Data.([]any)
  120. if len(dt) != 1 {
  121. t.Error("Rule List Is Empty!")
  122. }
  123. }
  124. func testCreateGroup(t *testing.T) {
  125. ret, err := httpClient.Post(TestHost+"/api/group/add", "application/json", strings.NewReader(`{
  126. "name":"TestGroup"
  127. }`))
  128. if err != nil {
  129. t.Error(err)
  130. }
  131. data, err := readResponse(ret.Body)
  132. if err != nil {
  133. t.Error(err)
  134. }
  135. if data.ErrorNo != 0 {
  136. t.Error("CreateGroup Api Error!", data)
  137. }
  138. ret, err = httpClient.Post(TestHost+"/api/group/list", "application/json", strings.NewReader(`{}`))
  139. if err != nil {
  140. t.Error(err)
  141. }
  142. data, err = readResponse(ret.Body)
  143. if err != nil {
  144. t.Error(err)
  145. }
  146. if data.ErrorNo != 0 {
  147. t.Error("CreateGroup Api Error!", data)
  148. }
  149. dt := data.Data.([]any)
  150. if len(dt) != 1 {
  151. t.Error("Group List Is Empty!")
  152. }
  153. }
  154. func testEditUser(t *testing.T) {
  155. ret, err := httpClient.Post(TestHost+"/api/user/edit", "application/json", strings.NewReader(`{
  156. "account":"user2",
  157. "username":"user2New",
  158. "password":"user2New"
  159. }`))
  160. if err != nil {
  161. t.Error(err)
  162. }
  163. data, err := readResponse(ret.Body)
  164. if err != nil {
  165. t.Error(err)
  166. }
  167. if data.ErrorNo != 0 {
  168. t.Error("Edit User Api Error!", data)
  169. }
  170. ret, err = httpClient.Post(TestHost+"/api/user/edit", "application/json", strings.NewReader(`{
  171. "account":"user3",
  172. "disabled": 1
  173. }`))
  174. if err != nil {
  175. t.Error(err)
  176. }
  177. data, err = readResponse(ret.Body)
  178. if err != nil {
  179. t.Error(err)
  180. }
  181. if data.ErrorNo != 0 {
  182. t.Error("Edit User Api Error!", data)
  183. }
  184. }
  185. func testCreateUser(t *testing.T) {
  186. ret, err := httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
  187. "account":"user1",
  188. "username":"user1",
  189. "password":"user1"
  190. }`))
  191. if err != nil {
  192. t.Error(err)
  193. }
  194. data, err := readResponse(ret.Body)
  195. if err != nil {
  196. t.Error(err)
  197. }
  198. if data.ErrorNo != 0 {
  199. t.Error("Create User Api Error!")
  200. }
  201. ret, err = httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
  202. "account":"user2",
  203. "username":"user2",
  204. "password":"user2"
  205. }`))
  206. if err != nil {
  207. t.Error(err)
  208. }
  209. data, err = readResponse(ret.Body)
  210. if err != nil {
  211. t.Error(err)
  212. }
  213. if data.ErrorNo != 0 {
  214. t.Error("Create User Api Error!")
  215. }
  216. ret, err = httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
  217. "account":"user3",
  218. "username":"user3",
  219. "password":"user3"
  220. }`))
  221. if err != nil {
  222. t.Error(err)
  223. }
  224. data, err = readResponse(ret.Body)
  225. if err != nil {
  226. t.Error(err)
  227. }
  228. if data.ErrorNo != 0 {
  229. t.Error("Create User Api Error!")
  230. }
  231. }
  232. func testPort(t *testing.T) {
  233. if !portCheck(TestPort) {
  234. t.Error("port check failed")
  235. }
  236. t.Log("port check passed")
  237. }
  238. func testDataBaseSet(t *testing.T) {
  239. // 获取配置
  240. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"database\"}"))
  241. if err != nil {
  242. t.Error(err)
  243. }
  244. data, err := readResponse(ret.Body)
  245. if err != nil {
  246. t.Error(err)
  247. }
  248. if data.ErrorNo != 0 {
  249. t.Error("Get Database Config Api Error!")
  250. }
  251. // 设置配置
  252. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
  253. {"action":"set","step":"database","db_type":"sqlite","db_dsn":"./config/pmail_temp.db"}
  254. `))
  255. if err != nil {
  256. t.Error(err)
  257. }
  258. data, err = readResponse(ret.Body)
  259. if err != nil {
  260. t.Error(err)
  261. }
  262. if data.ErrorNo != 0 {
  263. t.Error("Get Database Config Api Error!")
  264. }
  265. // 获取配置
  266. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"database\"}"))
  267. if err != nil {
  268. t.Error(err)
  269. }
  270. data, err = readResponse(ret.Body)
  271. if err != nil {
  272. t.Error(err)
  273. }
  274. if data.ErrorNo != 0 {
  275. t.Error("Get Database Config Api Error!")
  276. }
  277. dt := data.Data.(map[string]interface{})
  278. if cast.ToString(dt["db_dsn"]) != "./config/pmail_temp.db" {
  279. t.Error("Check Database Config Api Error!")
  280. }
  281. t.Log("Database Config Api Success!")
  282. }
  283. func testPwdSet(t *testing.T) {
  284. // 获取配置
  285. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"password\"}"))
  286. if err != nil {
  287. t.Error(err)
  288. }
  289. data, err := readResponse(ret.Body)
  290. if err != nil {
  291. t.Error(err)
  292. }
  293. if data.ErrorNo != 0 {
  294. t.Error("Get Password Config Api Error!")
  295. }
  296. // 设置配置
  297. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
  298. {"action":"set","step":"password","account":"testCase","password":"testCase"}
  299. `))
  300. if err != nil {
  301. t.Error(err)
  302. }
  303. data, err = readResponse(ret.Body)
  304. if err != nil {
  305. t.Error(err)
  306. }
  307. if data.ErrorNo != 0 {
  308. t.Error("Set Password Config Api Error!")
  309. t.Error(data)
  310. }
  311. // 获取配置
  312. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"password\"}"))
  313. if err != nil {
  314. t.Error(err)
  315. }
  316. data, err = readResponse(ret.Body)
  317. if err != nil {
  318. t.Error(err)
  319. }
  320. if data.ErrorNo != 0 {
  321. t.Error("Get Password Config Api Error!")
  322. }
  323. if cast.ToString(data.Data) != "testCase" {
  324. t.Error("Check Password Config Api Error!")
  325. }
  326. t.Log("Password Config Api Success!")
  327. }
  328. func testDomainSet(t *testing.T) {
  329. // 获取配置
  330. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"domain\"}"))
  331. if err != nil {
  332. t.Error(err)
  333. }
  334. data, err := readResponse(ret.Body)
  335. if err != nil {
  336. t.Error(err)
  337. }
  338. if data.ErrorNo != 0 {
  339. t.Error("Get domain Config Api Error!")
  340. }
  341. // 设置配置
  342. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
  343. {"action":"set","step":"domain","smtp_domain":"test.domain","web_domain":"mail.test.domain"}
  344. `))
  345. if err != nil {
  346. t.Error(err)
  347. }
  348. data, err = readResponse(ret.Body)
  349. if err != nil {
  350. t.Error(err)
  351. }
  352. if data.ErrorNo != 0 {
  353. t.Error("Set domain Config Api Error!")
  354. }
  355. // 获取配置
  356. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"domain\"}"))
  357. if err != nil {
  358. t.Error(err)
  359. }
  360. data, err = readResponse(ret.Body)
  361. if err != nil {
  362. t.Error(err)
  363. }
  364. if data.ErrorNo != 0 {
  365. t.Error("Get Password Config Api Error!")
  366. }
  367. dt := data.Data.(map[string]interface{})
  368. if cast.ToString(dt["smtp_domain"]) != "test.domain" {
  369. t.Error("Check domain Config Api Error!")
  370. }
  371. if cast.ToString(dt["web_domain"]) != "mail.test.domain" {
  372. t.Error("Check domain Config Api Error!")
  373. }
  374. t.Log("domain Config Api Success!")
  375. }
  376. func testDNSSet(t *testing.T) {
  377. // 获取配置
  378. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"dns\"}"))
  379. if err != nil {
  380. t.Error(err)
  381. }
  382. data, err := readResponse(ret.Body)
  383. if err != nil {
  384. t.Error(err)
  385. }
  386. if data.ErrorNo != 0 {
  387. t.Error("Get domain Config Api Error!")
  388. }
  389. t.Log("DNS Set Success!")
  390. }
  391. func testSSLSet(t *testing.T) {
  392. // 获取配置
  393. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"ssl\"}"))
  394. if err != nil {
  395. t.Error(err)
  396. }
  397. data, err := readResponse(ret.Body)
  398. if err != nil {
  399. t.Error(err)
  400. }
  401. if data.ErrorNo != 0 {
  402. t.Error("Get domain Config Api Error!")
  403. }
  404. // 设置配置
  405. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
  406. {"action":"set","step":"ssl","ssl_type":"1","key_path":"./config/ssl/private.key","crt_path":"./config/ssl/public.crt"}
  407. `))
  408. if err != nil {
  409. t.Error(err)
  410. }
  411. data, err = readResponse(ret.Body)
  412. if err != nil {
  413. t.Error(err)
  414. }
  415. if data.ErrorNo != 0 {
  416. t.Error("Set domain Config Api Error!")
  417. }
  418. t.Log("domain Config Api Success!")
  419. }
  420. func testLogin(t *testing.T) {
  421. ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"testCase\",\"password\":\"testCase\"}"))
  422. if err != nil {
  423. t.Error(err)
  424. }
  425. data, err := readResponse(ret.Body)
  426. if err != nil {
  427. t.Error(err)
  428. }
  429. if data.ErrorNo != 0 {
  430. t.Error("Login Api Error!")
  431. }
  432. }
  433. func testLoginUser2(t *testing.T) {
  434. ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"user2\",\"password\":\"user2New\"}"))
  435. if err != nil {
  436. t.Error(err)
  437. }
  438. data, err := readResponse(ret.Body)
  439. if err != nil {
  440. t.Error(err)
  441. }
  442. if data.ErrorNo != 0 {
  443. t.Error("Login User2 Api Error!", data)
  444. }
  445. }
  446. func testLoginUser3(t *testing.T) {
  447. ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"user3\",\"password\":\"user3\"}"))
  448. if err != nil {
  449. t.Error(err)
  450. }
  451. data, err := readResponse(ret.Body)
  452. if err != nil {
  453. t.Error(err)
  454. }
  455. if data.ErrorNo != 100 {
  456. t.Error("Login User3 Api Error!", data)
  457. }
  458. }
  459. func testSendEmail(t *testing.T) {
  460. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  461. {
  462. "from": {
  463. "name": "i",
  464. "email": "i@test.domain"
  465. },
  466. "to": [
  467. {
  468. "name": "y",
  469. "email": "y@test.domain"
  470. }
  471. ],
  472. "cc": [
  473. ],
  474. "subject": "Title",
  475. "text": "text",
  476. "html": "<div>text</div>"
  477. }
  478. `))
  479. if err != nil {
  480. t.Error(err)
  481. }
  482. data, err := readResponse(ret.Body)
  483. if err != nil {
  484. t.Error(err)
  485. }
  486. if data.ErrorNo != 0 {
  487. t.Error("Send Email Api Error!")
  488. }
  489. }
  490. func testSendEmail2User2ForMove(t *testing.T) {
  491. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  492. {
  493. "from": {
  494. "name": "user2",
  495. "email": "user2@test.domain"
  496. },
  497. "to": [
  498. {
  499. "name": "y",
  500. "email": "user2@test.domain"
  501. }
  502. ],
  503. "cc": [
  504. ],
  505. "subject": "MovePlease",
  506. "text": "NeedMove",
  507. "html": "<div>text</div>"
  508. }
  509. `))
  510. if err != nil {
  511. t.Error(err)
  512. }
  513. data, err := readResponse(ret.Body)
  514. if err != nil {
  515. t.Error(err)
  516. }
  517. if data.ErrorNo != 0 {
  518. t.Error("Send Email Api Error!")
  519. }
  520. }
  521. func testSendEmail2User1(t *testing.T) {
  522. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  523. {
  524. "from": {
  525. "name": "i",
  526. "email": "i@test.domain"
  527. },
  528. "to": [
  529. {
  530. "name": "y",
  531. "email": "user1@test.domain"
  532. }
  533. ],
  534. "cc": [
  535. ],
  536. "subject": "HelloUser1",
  537. "text": "text",
  538. "html": "<div>text</div>"
  539. }
  540. `))
  541. if err != nil {
  542. t.Error(err)
  543. }
  544. data, err := readResponse(ret.Body)
  545. if err != nil {
  546. t.Error(err)
  547. }
  548. if data.ErrorNo != 0 {
  549. t.Error("Send Email Api Error!")
  550. }
  551. }
  552. func testSendEmail2User2(t *testing.T) {
  553. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  554. {
  555. "from": {
  556. "name": "i",
  557. "email": "i@test.domain"
  558. },
  559. "to": [
  560. {
  561. "name": "y",
  562. "email": "user2@test.domain"
  563. }
  564. ],
  565. "cc": [
  566. ],
  567. "subject": "HelloUser2",
  568. "text": "text",
  569. "html": "<div>text</div>"
  570. }
  571. `))
  572. if err != nil {
  573. t.Error(err)
  574. }
  575. data, err := readResponse(ret.Body)
  576. if err != nil {
  577. t.Error(err)
  578. }
  579. if data.ErrorNo != 0 {
  580. t.Error("Send Email Api Error!")
  581. }
  582. }
  583. func testSendEmail2User3(t *testing.T) {
  584. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  585. {
  586. "from": {
  587. "name": "i",
  588. "email": "i@test.domain"
  589. },
  590. "to": [
  591. {
  592. "name": "y",
  593. "email": "user3@test.domain"
  594. }
  595. ],
  596. "cc": [
  597. ],
  598. "subject": "HelloUser3",
  599. "text": "text",
  600. "html": "<div>text</div>"
  601. }
  602. `))
  603. if err != nil {
  604. t.Error(err)
  605. }
  606. data, err := readResponse(ret.Body)
  607. if err != nil {
  608. t.Error(err)
  609. }
  610. if data.ErrorNo != 0 {
  611. t.Error("Send Email Api Error!")
  612. }
  613. }
  614. func testEmailList(t *testing.T) {
  615. ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
  616. if err != nil {
  617. t.Error(err)
  618. }
  619. data, err := readResponse(ret.Body)
  620. if err != nil {
  621. t.Error(err)
  622. }
  623. if data.ErrorNo != 0 {
  624. t.Error("Get Email List Api Error!")
  625. }
  626. dt := data.Data.(map[string]interface{})
  627. if len(dt["list"].([]interface{})) != 1 {
  628. t.Error("Email List Is Empty!")
  629. }
  630. lst := dt["list"].([]interface{})
  631. item := lst[0].(map[string]interface{})
  632. id := cast.ToInt(item["id"])
  633. if id == 0 {
  634. t.Error("Email List Data Error!")
  635. }
  636. }
  637. func testUser2EmailList(t *testing.T) {
  638. ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
  639. if err != nil {
  640. t.Error(err)
  641. }
  642. data, err := readResponse(ret.Body)
  643. if err != nil {
  644. t.Error(err)
  645. }
  646. if data.ErrorNo != 0 {
  647. t.Error("Get Email List Api Error!")
  648. }
  649. dt := data.Data.(map[string]interface{})
  650. if dt["list"] == nil || len(dt["list"].([]interface{})) != 1 {
  651. t.Error("Email List Is Empty!")
  652. }
  653. }
  654. func testDelEmail(t *testing.T) {
  655. ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
  656. if err != nil {
  657. t.Error(err)
  658. }
  659. data, err := readResponse(ret.Body)
  660. if err != nil {
  661. t.Error(err)
  662. }
  663. if data.ErrorNo != 0 {
  664. t.Error("Get Email List Api Error!")
  665. }
  666. dt := data.Data.(map[string]interface{})
  667. if len(dt["list"].([]interface{})) == 0 {
  668. t.Error("Email List Is Empty!")
  669. }
  670. lst := dt["list"].([]interface{})
  671. item := lst[0].(map[string]interface{})
  672. id := cast.ToInt(item["id"])
  673. ret, err = httpClient.Post(TestHost+"/api/email/del", "application/json", strings.NewReader(fmt.Sprintf(`{
  674. "ids":[%d]
  675. }`, id)))
  676. if err != nil {
  677. t.Error(err)
  678. }
  679. data, err = readResponse(ret.Body)
  680. if err != nil {
  681. t.Error(err)
  682. }
  683. if data.ErrorNo != 0 {
  684. t.Error("Email Delete Api Error!")
  685. }
  686. var mail models.UserEmail
  687. db.Instance.Where("email_id = ?", id).Get(&mail)
  688. if mail.Status != 3 {
  689. t.Error("Email Delete Api Error!")
  690. }
  691. }
  692. // portCheck 检查端口是占用
  693. func portCheck(port int) bool {
  694. l, err := net.Listen("tcp", fmt.Sprintf(":%s", strconv.Itoa(port)))
  695. if err != nil {
  696. return true
  697. }
  698. defer l.Close()
  699. return false
  700. }
  701. func readResponse(r io.Reader) (*response.Response, error) {
  702. data, err := io.ReadAll(r)
  703. if err != nil {
  704. return nil, err
  705. }
  706. ret := &response.Response{}
  707. err = json.Unmarshal(data, ret)
  708. if err != nil {
  709. return nil, err
  710. }
  711. return ret, nil
  712. }