main_test.go 18 KB

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