main_test.go 18 KB

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