config_test.go 26 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204
  1. // Copyright 2019 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package config // import "miniflux.app/config"
  5. import (
  6. "io/ioutil"
  7. "os"
  8. "testing"
  9. )
  10. func TestDebugModeOn(t *testing.T) {
  11. os.Clearenv()
  12. os.Setenv("DEBUG", "1")
  13. parser := NewParser()
  14. opts, err := parser.ParseEnvironmentVariables()
  15. if err != nil {
  16. t.Fatalf(`Parsing failure: %v`, err)
  17. }
  18. if !opts.HasDebugMode() {
  19. t.Fatalf(`Unexpected debug mode value, got "%v"`, opts.HasDebugMode())
  20. }
  21. }
  22. func TestDebugModeOff(t *testing.T) {
  23. os.Clearenv()
  24. parser := NewParser()
  25. opts, err := parser.ParseEnvironmentVariables()
  26. if err != nil {
  27. t.Fatalf(`Parsing failure: %v`, err)
  28. }
  29. if opts.HasDebugMode() {
  30. t.Fatalf(`Unexpected debug mode value, got "%v"`, opts.HasDebugMode())
  31. }
  32. }
  33. func TestCustomBaseURL(t *testing.T) {
  34. os.Clearenv()
  35. os.Setenv("BASE_URL", "http://example.org")
  36. parser := NewParser()
  37. opts, err := parser.ParseEnvironmentVariables()
  38. if err != nil {
  39. t.Fatalf(`Parsing failure: %v`, err)
  40. }
  41. if opts.BaseURL() != "http://example.org" {
  42. t.Fatalf(`Unexpected base URL, got "%s"`, opts.BaseURL())
  43. }
  44. if opts.RootURL() != "http://example.org" {
  45. t.Fatalf(`Unexpected root URL, got "%s"`, opts.RootURL())
  46. }
  47. if opts.BasePath() != "" {
  48. t.Fatalf(`Unexpected base path, got "%s"`, opts.BasePath())
  49. }
  50. }
  51. func TestCustomBaseURLWithTrailingSlash(t *testing.T) {
  52. os.Clearenv()
  53. os.Setenv("BASE_URL", "http://example.org/folder/")
  54. parser := NewParser()
  55. opts, err := parser.ParseEnvironmentVariables()
  56. if err != nil {
  57. t.Fatalf(`Parsing failure: %v`, err)
  58. }
  59. if opts.BaseURL() != "http://example.org/folder" {
  60. t.Fatalf(`Unexpected base URL, got "%s"`, opts.BaseURL())
  61. }
  62. if opts.RootURL() != "http://example.org" {
  63. t.Fatalf(`Unexpected root URL, got "%s"`, opts.RootURL())
  64. }
  65. if opts.BasePath() != "/folder" {
  66. t.Fatalf(`Unexpected base path, got "%s"`, opts.BasePath())
  67. }
  68. }
  69. func TestBaseURLWithoutScheme(t *testing.T) {
  70. os.Clearenv()
  71. os.Setenv("BASE_URL", "example.org/folder/")
  72. _, err := NewParser().ParseEnvironmentVariables()
  73. if err == nil {
  74. t.Fatalf(`Parsing must fail`)
  75. }
  76. }
  77. func TestBaseURLWithInvalidScheme(t *testing.T) {
  78. os.Clearenv()
  79. os.Setenv("BASE_URL", "ftp://example.org/folder/")
  80. _, err := NewParser().ParseEnvironmentVariables()
  81. if err == nil {
  82. t.Fatalf(`Parsing must fail`)
  83. }
  84. }
  85. func TestInvalidBaseURL(t *testing.T) {
  86. os.Clearenv()
  87. os.Setenv("BASE_URL", "http://example|org")
  88. _, err := NewParser().ParseEnvironmentVariables()
  89. if err == nil {
  90. t.Fatalf(`Parsing must fail`)
  91. }
  92. }
  93. func TestDefaultBaseURL(t *testing.T) {
  94. os.Clearenv()
  95. parser := NewParser()
  96. opts, err := parser.ParseEnvironmentVariables()
  97. if err != nil {
  98. t.Fatalf(`Parsing failure: %v`, err)
  99. }
  100. if opts.BaseURL() != defaultBaseURL {
  101. t.Fatalf(`Unexpected base URL, got "%s"`, opts.BaseURL())
  102. }
  103. if opts.RootURL() != defaultBaseURL {
  104. t.Fatalf(`Unexpected root URL, got "%s"`, opts.RootURL())
  105. }
  106. if opts.BasePath() != "" {
  107. t.Fatalf(`Unexpected base path, got "%s"`, opts.BasePath())
  108. }
  109. }
  110. func TestDatabaseURL(t *testing.T) {
  111. os.Clearenv()
  112. os.Setenv("DATABASE_URL", "foobar")
  113. parser := NewParser()
  114. opts, err := parser.ParseEnvironmentVariables()
  115. if err != nil {
  116. t.Fatalf(`Parsing failure: %v`, err)
  117. }
  118. expected := "foobar"
  119. result := opts.DatabaseURL()
  120. if result != expected {
  121. t.Errorf(`Unexpected DATABASE_URL value, got %q instead of %q`, result, expected)
  122. }
  123. if opts.IsDefaultDatabaseURL() {
  124. t.Errorf(`This is not the default database URL and it should returns false`)
  125. }
  126. }
  127. func TestDefaultDatabaseURLValue(t *testing.T) {
  128. os.Clearenv()
  129. parser := NewParser()
  130. opts, err := parser.ParseEnvironmentVariables()
  131. if err != nil {
  132. t.Fatalf(`Parsing failure: %v`, err)
  133. }
  134. expected := defaultDatabaseURL
  135. result := opts.DatabaseURL()
  136. if result != expected {
  137. t.Errorf(`Unexpected DATABASE_URL value, got %q instead of %q`, result, expected)
  138. }
  139. if !opts.IsDefaultDatabaseURL() {
  140. t.Errorf(`This is the default database URL and it should returns true`)
  141. }
  142. }
  143. func TestDefaultDatabaseMaxConnsValue(t *testing.T) {
  144. os.Clearenv()
  145. parser := NewParser()
  146. opts, err := parser.ParseEnvironmentVariables()
  147. if err != nil {
  148. t.Fatalf(`Parsing failure: %v`, err)
  149. }
  150. expected := defaultDatabaseMaxConns
  151. result := opts.DatabaseMaxConns()
  152. if result != expected {
  153. t.Fatalf(`Unexpected DATABASE_MAX_CONNS value, got %v instead of %v`, result, expected)
  154. }
  155. }
  156. func TestDatabaseMaxConns(t *testing.T) {
  157. os.Clearenv()
  158. os.Setenv("DATABASE_MAX_CONNS", "42")
  159. parser := NewParser()
  160. opts, err := parser.ParseEnvironmentVariables()
  161. if err != nil {
  162. t.Fatalf(`Parsing failure: %v`, err)
  163. }
  164. expected := 42
  165. result := opts.DatabaseMaxConns()
  166. if result != expected {
  167. t.Fatalf(`Unexpected DATABASE_MAX_CONNS value, got %v instead of %v`, result, expected)
  168. }
  169. }
  170. func TestDefaultDatabaseMinConnsValue(t *testing.T) {
  171. os.Clearenv()
  172. parser := NewParser()
  173. opts, err := parser.ParseEnvironmentVariables()
  174. if err != nil {
  175. t.Fatalf(`Parsing failure: %v`, err)
  176. }
  177. expected := defaultDatabaseMinConns
  178. result := opts.DatabaseMinConns()
  179. if result != expected {
  180. t.Fatalf(`Unexpected DATABASE_MIN_CONNS value, got %v instead of %v`, result, expected)
  181. }
  182. }
  183. func TestDatabaseMinConns(t *testing.T) {
  184. os.Clearenv()
  185. os.Setenv("DATABASE_MIN_CONNS", "42")
  186. parser := NewParser()
  187. opts, err := parser.ParseEnvironmentVariables()
  188. if err != nil {
  189. t.Fatalf(`Parsing failure: %v`, err)
  190. }
  191. expected := 42
  192. result := opts.DatabaseMinConns()
  193. if result != expected {
  194. t.Fatalf(`Unexpected DATABASE_MIN_CONNS value, got %v instead of %v`, result, expected)
  195. }
  196. }
  197. func TestListenAddr(t *testing.T) {
  198. os.Clearenv()
  199. os.Setenv("LISTEN_ADDR", "foobar")
  200. parser := NewParser()
  201. opts, err := parser.ParseEnvironmentVariables()
  202. if err != nil {
  203. t.Fatalf(`Parsing failure: %v`, err)
  204. }
  205. expected := "foobar"
  206. result := opts.ListenAddr()
  207. if result != expected {
  208. t.Fatalf(`Unexpected LISTEN_ADDR value, got %q instead of %q`, result, expected)
  209. }
  210. }
  211. func TestListenAddrWithPortDefined(t *testing.T) {
  212. os.Clearenv()
  213. os.Setenv("PORT", "3000")
  214. os.Setenv("LISTEN_ADDR", "foobar")
  215. parser := NewParser()
  216. opts, err := parser.ParseEnvironmentVariables()
  217. if err != nil {
  218. t.Fatalf(`Parsing failure: %v`, err)
  219. }
  220. expected := ":3000"
  221. result := opts.ListenAddr()
  222. if result != expected {
  223. t.Fatalf(`Unexpected LISTEN_ADDR value, got %q instead of %q`, result, expected)
  224. }
  225. }
  226. func TestDefaultListenAddrValue(t *testing.T) {
  227. os.Clearenv()
  228. parser := NewParser()
  229. opts, err := parser.ParseEnvironmentVariables()
  230. if err != nil {
  231. t.Fatalf(`Parsing failure: %v`, err)
  232. }
  233. expected := defaultListenAddr
  234. result := opts.ListenAddr()
  235. if result != expected {
  236. t.Fatalf(`Unexpected LISTEN_ADDR value, got %q instead of %q`, result, expected)
  237. }
  238. }
  239. func TestCertFile(t *testing.T) {
  240. os.Clearenv()
  241. os.Setenv("CERT_FILE", "foobar")
  242. parser := NewParser()
  243. opts, err := parser.ParseEnvironmentVariables()
  244. if err != nil {
  245. t.Fatalf(`Parsing failure: %v`, err)
  246. }
  247. expected := "foobar"
  248. result := opts.CertFile()
  249. if result != expected {
  250. t.Fatalf(`Unexpected CERT_FILE value, got %q instead of %q`, result, expected)
  251. }
  252. }
  253. func TestDefaultCertFileValue(t *testing.T) {
  254. os.Clearenv()
  255. parser := NewParser()
  256. opts, err := parser.ParseEnvironmentVariables()
  257. if err != nil {
  258. t.Fatalf(`Parsing failure: %v`, err)
  259. }
  260. expected := defaultCertFile
  261. result := opts.CertFile()
  262. if result != expected {
  263. t.Fatalf(`Unexpected CERT_FILE value, got %q instead of %q`, result, expected)
  264. }
  265. }
  266. func TestKeyFile(t *testing.T) {
  267. os.Clearenv()
  268. os.Setenv("KEY_FILE", "foobar")
  269. parser := NewParser()
  270. opts, err := parser.ParseEnvironmentVariables()
  271. if err != nil {
  272. t.Fatalf(`Parsing failure: %v`, err)
  273. }
  274. expected := "foobar"
  275. result := opts.CertKeyFile()
  276. if result != expected {
  277. t.Fatalf(`Unexpected KEY_FILE value, got %q instead of %q`, result, expected)
  278. }
  279. }
  280. func TestDefaultKeyFileValue(t *testing.T) {
  281. os.Clearenv()
  282. parser := NewParser()
  283. opts, err := parser.ParseEnvironmentVariables()
  284. if err != nil {
  285. t.Fatalf(`Parsing failure: %v`, err)
  286. }
  287. expected := defaultKeyFile
  288. result := opts.CertKeyFile()
  289. if result != expected {
  290. t.Fatalf(`Unexpected KEY_FILE value, got %q instead of %q`, result, expected)
  291. }
  292. }
  293. func TestCertDomain(t *testing.T) {
  294. os.Clearenv()
  295. os.Setenv("CERT_DOMAIN", "example.org")
  296. parser := NewParser()
  297. opts, err := parser.ParseEnvironmentVariables()
  298. if err != nil {
  299. t.Fatalf(`Parsing failure: %v`, err)
  300. }
  301. expected := "example.org"
  302. result := opts.CertDomain()
  303. if result != expected {
  304. t.Fatalf(`Unexpected CERT_DOMAIN value, got %q instead of %q`, result, expected)
  305. }
  306. }
  307. func TestDefaultCertDomainValue(t *testing.T) {
  308. os.Clearenv()
  309. parser := NewParser()
  310. opts, err := parser.ParseEnvironmentVariables()
  311. if err != nil {
  312. t.Fatalf(`Parsing failure: %v`, err)
  313. }
  314. expected := defaultCertDomain
  315. result := opts.CertDomain()
  316. if result != expected {
  317. t.Fatalf(`Unexpected CERT_DOMAIN value, got %q instead of %q`, result, expected)
  318. }
  319. }
  320. func TestCertCache(t *testing.T) {
  321. os.Clearenv()
  322. os.Setenv("CERT_CACHE", "foobar")
  323. parser := NewParser()
  324. opts, err := parser.ParseEnvironmentVariables()
  325. if err != nil {
  326. t.Fatalf(`Parsing failure: %v`, err)
  327. }
  328. expected := "foobar"
  329. result := opts.CertCache()
  330. if result != expected {
  331. t.Fatalf(`Unexpected CERT_CACHE value, got %q instead of %q`, result, expected)
  332. }
  333. }
  334. func TestDefaultCertCacheValue(t *testing.T) {
  335. os.Clearenv()
  336. parser := NewParser()
  337. opts, err := parser.ParseEnvironmentVariables()
  338. if err != nil {
  339. t.Fatalf(`Parsing failure: %v`, err)
  340. }
  341. expected := defaultCertCache
  342. result := opts.CertCache()
  343. if result != expected {
  344. t.Fatalf(`Unexpected CERT_CACHE value, got %q instead of %q`, result, expected)
  345. }
  346. }
  347. func TestDefaultCleanupFrequencyValue(t *testing.T) {
  348. os.Clearenv()
  349. parser := NewParser()
  350. opts, err := parser.ParseEnvironmentVariables()
  351. if err != nil {
  352. t.Fatalf(`Parsing failure: %v`, err)
  353. }
  354. expected := defaultCleanupFrequency
  355. result := opts.CleanupFrequency()
  356. if result != expected {
  357. t.Fatalf(`Unexpected CLEANUP_FREQUENCY value, got %v instead of %v`, result, expected)
  358. }
  359. }
  360. func TestCleanupFrequency(t *testing.T) {
  361. os.Clearenv()
  362. os.Setenv("CLEANUP_FREQUENCY", "42")
  363. parser := NewParser()
  364. opts, err := parser.ParseEnvironmentVariables()
  365. if err != nil {
  366. t.Fatalf(`Parsing failure: %v`, err)
  367. }
  368. expected := 42
  369. result := opts.CleanupFrequency()
  370. if result != expected {
  371. t.Fatalf(`Unexpected CLEANUP_FREQUENCY value, got %v instead of %v`, result, expected)
  372. }
  373. }
  374. func TestDefaultWorkerPoolSizeValue(t *testing.T) {
  375. os.Clearenv()
  376. parser := NewParser()
  377. opts, err := parser.ParseEnvironmentVariables()
  378. if err != nil {
  379. t.Fatalf(`Parsing failure: %v`, err)
  380. }
  381. expected := defaultWorkerPoolSize
  382. result := opts.WorkerPoolSize()
  383. if result != expected {
  384. t.Fatalf(`Unexpected WORKER_POOL_SIZE value, got %v instead of %v`, result, expected)
  385. }
  386. }
  387. func TestWorkerPoolSize(t *testing.T) {
  388. os.Clearenv()
  389. os.Setenv("WORKER_POOL_SIZE", "42")
  390. parser := NewParser()
  391. opts, err := parser.ParseEnvironmentVariables()
  392. if err != nil {
  393. t.Fatalf(`Parsing failure: %v`, err)
  394. }
  395. expected := 42
  396. result := opts.WorkerPoolSize()
  397. if result != expected {
  398. t.Fatalf(`Unexpected WORKER_POOL_SIZE value, got %v instead of %v`, result, expected)
  399. }
  400. }
  401. func TestDefautPollingFrequencyValue(t *testing.T) {
  402. os.Clearenv()
  403. parser := NewParser()
  404. opts, err := parser.ParseEnvironmentVariables()
  405. if err != nil {
  406. t.Fatalf(`Parsing failure: %v`, err)
  407. }
  408. expected := defaultPollingFrequency
  409. result := opts.PollingFrequency()
  410. if result != expected {
  411. t.Fatalf(`Unexpected POLLING_FREQUENCY value, got %v instead of %v`, result, expected)
  412. }
  413. }
  414. func TestPollingFrequency(t *testing.T) {
  415. os.Clearenv()
  416. os.Setenv("POLLING_FREQUENCY", "42")
  417. parser := NewParser()
  418. opts, err := parser.ParseEnvironmentVariables()
  419. if err != nil {
  420. t.Fatalf(`Parsing failure: %v`, err)
  421. }
  422. expected := 42
  423. result := opts.PollingFrequency()
  424. if result != expected {
  425. t.Fatalf(`Unexpected POLLING_FREQUENCY value, got %v instead of %v`, result, expected)
  426. }
  427. }
  428. func TestDefaultBatchSizeValue(t *testing.T) {
  429. os.Clearenv()
  430. parser := NewParser()
  431. opts, err := parser.ParseEnvironmentVariables()
  432. if err != nil {
  433. t.Fatalf(`Parsing failure: %v`, err)
  434. }
  435. expected := defaultBatchSize
  436. result := opts.BatchSize()
  437. if result != expected {
  438. t.Fatalf(`Unexpected BATCH_SIZE value, got %v instead of %v`, result, expected)
  439. }
  440. }
  441. func TestBatchSize(t *testing.T) {
  442. os.Clearenv()
  443. os.Setenv("BATCH_SIZE", "42")
  444. parser := NewParser()
  445. opts, err := parser.ParseEnvironmentVariables()
  446. if err != nil {
  447. t.Fatalf(`Parsing failure: %v`, err)
  448. }
  449. expected := 42
  450. result := opts.BatchSize()
  451. if result != expected {
  452. t.Fatalf(`Unexpected BATCH_SIZE value, got %v instead of %v`, result, expected)
  453. }
  454. }
  455. func TestOAuth2UserCreationWhenUnset(t *testing.T) {
  456. os.Clearenv()
  457. parser := NewParser()
  458. opts, err := parser.ParseEnvironmentVariables()
  459. if err != nil {
  460. t.Fatalf(`Parsing failure: %v`, err)
  461. }
  462. expected := false
  463. result := opts.IsOAuth2UserCreationAllowed()
  464. if result != expected {
  465. t.Fatalf(`Unexpected OAUTH2_USER_CREATION value, got %v instead of %v`, result, expected)
  466. }
  467. }
  468. func TestOAuth2UserCreationAdmin(t *testing.T) {
  469. os.Clearenv()
  470. os.Setenv("OAUTH2_USER_CREATION", "1")
  471. parser := NewParser()
  472. opts, err := parser.ParseEnvironmentVariables()
  473. if err != nil {
  474. t.Fatalf(`Parsing failure: %v`, err)
  475. }
  476. expected := true
  477. result := opts.IsOAuth2UserCreationAllowed()
  478. if result != expected {
  479. t.Fatalf(`Unexpected OAUTH2_USER_CREATION value, got %v instead of %v`, result, expected)
  480. }
  481. }
  482. func TestOAuth2ClientID(t *testing.T) {
  483. os.Clearenv()
  484. os.Setenv("OAUTH2_CLIENT_ID", "foobar")
  485. parser := NewParser()
  486. opts, err := parser.ParseEnvironmentVariables()
  487. if err != nil {
  488. t.Fatalf(`Parsing failure: %v`, err)
  489. }
  490. expected := "foobar"
  491. result := opts.OAuth2ClientID()
  492. if result != expected {
  493. t.Fatalf(`Unexpected OAUTH2_CLIENT_ID value, got %q instead of %q`, result, expected)
  494. }
  495. }
  496. func TestDefaultOAuth2ClientIDValue(t *testing.T) {
  497. os.Clearenv()
  498. parser := NewParser()
  499. opts, err := parser.ParseEnvironmentVariables()
  500. if err != nil {
  501. t.Fatalf(`Parsing failure: %v`, err)
  502. }
  503. expected := defaultOAuth2ClientID
  504. result := opts.OAuth2ClientID()
  505. if result != expected {
  506. t.Fatalf(`Unexpected OAUTH2_CLIENT_ID value, got %q instead of %q`, result, expected)
  507. }
  508. }
  509. func TestOAuth2ClientSecret(t *testing.T) {
  510. os.Clearenv()
  511. os.Setenv("OAUTH2_CLIENT_SECRET", "secret")
  512. parser := NewParser()
  513. opts, err := parser.ParseEnvironmentVariables()
  514. if err != nil {
  515. t.Fatalf(`Parsing failure: %v`, err)
  516. }
  517. expected := "secret"
  518. result := opts.OAuth2ClientSecret()
  519. if result != expected {
  520. t.Fatalf(`Unexpected OAUTH2_CLIENT_SECRET value, got %q instead of %q`, result, expected)
  521. }
  522. }
  523. func TestDefaultOAuth2ClientSecretValue(t *testing.T) {
  524. os.Clearenv()
  525. parser := NewParser()
  526. opts, err := parser.ParseEnvironmentVariables()
  527. if err != nil {
  528. t.Fatalf(`Parsing failure: %v`, err)
  529. }
  530. expected := defaultOAuth2ClientSecret
  531. result := opts.OAuth2ClientSecret()
  532. if result != expected {
  533. t.Fatalf(`Unexpected OAUTH2_CLIENT_SECRET value, got %q instead of %q`, result, expected)
  534. }
  535. }
  536. func TestOAuth2RedirectURL(t *testing.T) {
  537. os.Clearenv()
  538. os.Setenv("OAUTH2_REDIRECT_URL", "http://example.org")
  539. parser := NewParser()
  540. opts, err := parser.ParseEnvironmentVariables()
  541. if err != nil {
  542. t.Fatalf(`Parsing failure: %v`, err)
  543. }
  544. expected := "http://example.org"
  545. result := opts.OAuth2RedirectURL()
  546. if result != expected {
  547. t.Fatalf(`Unexpected OAUTH2_REDIRECT_URL value, got %q instead of %q`, result, expected)
  548. }
  549. }
  550. func TestDefaultOAuth2RedirectURLValue(t *testing.T) {
  551. os.Clearenv()
  552. parser := NewParser()
  553. opts, err := parser.ParseEnvironmentVariables()
  554. if err != nil {
  555. t.Fatalf(`Parsing failure: %v`, err)
  556. }
  557. expected := defaultOAuth2RedirectURL
  558. result := opts.OAuth2RedirectURL()
  559. if result != expected {
  560. t.Fatalf(`Unexpected OAUTH2_REDIRECT_URL value, got %q instead of %q`, result, expected)
  561. }
  562. }
  563. func TestOAuth2Provider(t *testing.T) {
  564. os.Clearenv()
  565. os.Setenv("OAUTH2_PROVIDER", "google")
  566. parser := NewParser()
  567. opts, err := parser.ParseEnvironmentVariables()
  568. if err != nil {
  569. t.Fatalf(`Parsing failure: %v`, err)
  570. }
  571. expected := "google"
  572. result := opts.OAuth2Provider()
  573. if result != expected {
  574. t.Fatalf(`Unexpected OAUTH2_PROVIDER value, got %q instead of %q`, result, expected)
  575. }
  576. }
  577. func TestDefaultOAuth2ProviderValue(t *testing.T) {
  578. os.Clearenv()
  579. parser := NewParser()
  580. opts, err := parser.ParseEnvironmentVariables()
  581. if err != nil {
  582. t.Fatalf(`Parsing failure: %v`, err)
  583. }
  584. expected := defaultOAuth2Provider
  585. result := opts.OAuth2Provider()
  586. if result != expected {
  587. t.Fatalf(`Unexpected OAUTH2_PROVIDER value, got %q instead of %q`, result, expected)
  588. }
  589. }
  590. func TestHSTSWhenUnset(t *testing.T) {
  591. os.Clearenv()
  592. parser := NewParser()
  593. opts, err := parser.ParseEnvironmentVariables()
  594. if err != nil {
  595. t.Fatalf(`Parsing failure: %v`, err)
  596. }
  597. expected := true
  598. result := opts.HasHSTS()
  599. if result != expected {
  600. t.Fatalf(`Unexpected DISABLE_HSTS value, got %v instead of %v`, result, expected)
  601. }
  602. }
  603. func TestHSTS(t *testing.T) {
  604. os.Clearenv()
  605. os.Setenv("DISABLE_HSTS", "1")
  606. parser := NewParser()
  607. opts, err := parser.ParseEnvironmentVariables()
  608. if err != nil {
  609. t.Fatalf(`Parsing failure: %v`, err)
  610. }
  611. expected := false
  612. result := opts.HasHSTS()
  613. if result != expected {
  614. t.Fatalf(`Unexpected DISABLE_HSTS value, got %v instead of %v`, result, expected)
  615. }
  616. }
  617. func TestDisableHTTPServiceWhenUnset(t *testing.T) {
  618. os.Clearenv()
  619. parser := NewParser()
  620. opts, err := parser.ParseEnvironmentVariables()
  621. if err != nil {
  622. t.Fatalf(`Parsing failure: %v`, err)
  623. }
  624. expected := true
  625. result := opts.HasHTTPService()
  626. if result != expected {
  627. t.Fatalf(`Unexpected DISABLE_HTTP_SERVICE value, got %v instead of %v`, result, expected)
  628. }
  629. }
  630. func TestDisableHTTPService(t *testing.T) {
  631. os.Clearenv()
  632. os.Setenv("DISABLE_HTTP_SERVICE", "1")
  633. parser := NewParser()
  634. opts, err := parser.ParseEnvironmentVariables()
  635. if err != nil {
  636. t.Fatalf(`Parsing failure: %v`, err)
  637. }
  638. expected := false
  639. result := opts.HasHTTPService()
  640. if result != expected {
  641. t.Fatalf(`Unexpected DISABLE_HTTP_SERVICE value, got %v instead of %v`, result, expected)
  642. }
  643. }
  644. func TestDisableSchedulerServiceWhenUnset(t *testing.T) {
  645. os.Clearenv()
  646. parser := NewParser()
  647. opts, err := parser.ParseEnvironmentVariables()
  648. if err != nil {
  649. t.Fatalf(`Parsing failure: %v`, err)
  650. }
  651. expected := true
  652. result := opts.HasSchedulerService()
  653. if result != expected {
  654. t.Fatalf(`Unexpected DISABLE_SCHEDULER_SERVICE value, got %v instead of %v`, result, expected)
  655. }
  656. }
  657. func TestDisableSchedulerService(t *testing.T) {
  658. os.Clearenv()
  659. os.Setenv("DISABLE_SCHEDULER_SERVICE", "1")
  660. parser := NewParser()
  661. opts, err := parser.ParseEnvironmentVariables()
  662. if err != nil {
  663. t.Fatalf(`Parsing failure: %v`, err)
  664. }
  665. expected := false
  666. result := opts.HasSchedulerService()
  667. if result != expected {
  668. t.Fatalf(`Unexpected DISABLE_SCHEDULER_SERVICE value, got %v instead of %v`, result, expected)
  669. }
  670. }
  671. func TestArchiveReadDays(t *testing.T) {
  672. os.Clearenv()
  673. os.Setenv("ARCHIVE_READ_DAYS", "7")
  674. parser := NewParser()
  675. opts, err := parser.ParseEnvironmentVariables()
  676. if err != nil {
  677. t.Fatalf(`Parsing failure: %v`, err)
  678. }
  679. expected := 7
  680. result := opts.ArchiveReadDays()
  681. if result != expected {
  682. t.Fatalf(`Unexpected ARCHIVE_READ_DAYS value, got %v instead of %v`, result, expected)
  683. }
  684. }
  685. func TestRemoveSessionsDays(t *testing.T) {
  686. os.Clearenv()
  687. os.Setenv("REMOVE_SESSIONS_DAYS", "7")
  688. parser := NewParser()
  689. opts, err := parser.ParseEnvironmentVariables()
  690. if err != nil {
  691. t.Fatalf(`Parsing failure: %v`, err)
  692. }
  693. expected := 7
  694. result := opts.RemoveSessionsDays()
  695. if result != expected {
  696. t.Fatalf(`Unexpected REMOVE_SESSIONS_DAYS value, got %v instead of %v`, result, expected)
  697. }
  698. }
  699. func TestDefaultRemoveSessionsDays(t *testing.T) {
  700. os.Clearenv()
  701. parser := NewParser()
  702. opts, err := parser.ParseEnvironmentVariables()
  703. if err != nil {
  704. t.Fatalf(`Parsing failure: %v`, err)
  705. }
  706. expected := 30
  707. result := opts.RemoveSessionsDays()
  708. if result != expected {
  709. t.Fatalf(`Unexpected REMOVE_SESSIONS_DAYS value, got %v instead of %v`, result, expected)
  710. }
  711. }
  712. func TestRunMigrationsWhenUnset(t *testing.T) {
  713. os.Clearenv()
  714. parser := NewParser()
  715. opts, err := parser.ParseEnvironmentVariables()
  716. if err != nil {
  717. t.Fatalf(`Parsing failure: %v`, err)
  718. }
  719. expected := false
  720. result := opts.RunMigrations()
  721. if result != expected {
  722. t.Fatalf(`Unexpected RUN_MIGRATIONS value, got %v instead of %v`, result, expected)
  723. }
  724. }
  725. func TestRunMigrations(t *testing.T) {
  726. os.Clearenv()
  727. os.Setenv("RUN_MIGRATIONS", "yes")
  728. parser := NewParser()
  729. opts, err := parser.ParseEnvironmentVariables()
  730. if err != nil {
  731. t.Fatalf(`Parsing failure: %v`, err)
  732. }
  733. expected := true
  734. result := opts.RunMigrations()
  735. if result != expected {
  736. t.Fatalf(`Unexpected RUN_MIGRATIONS value, got %v instead of %v`, result, expected)
  737. }
  738. }
  739. func TestCreateAdminWhenUnset(t *testing.T) {
  740. os.Clearenv()
  741. parser := NewParser()
  742. opts, err := parser.ParseEnvironmentVariables()
  743. if err != nil {
  744. t.Fatalf(`Parsing failure: %v`, err)
  745. }
  746. expected := false
  747. result := opts.CreateAdmin()
  748. if result != expected {
  749. t.Fatalf(`Unexpected CREATE_ADMIN value, got %v instead of %v`, result, expected)
  750. }
  751. }
  752. func TestCreateAdmin(t *testing.T) {
  753. os.Clearenv()
  754. os.Setenv("CREATE_ADMIN", "true")
  755. parser := NewParser()
  756. opts, err := parser.ParseEnvironmentVariables()
  757. if err != nil {
  758. t.Fatalf(`Parsing failure: %v`, err)
  759. }
  760. expected := true
  761. result := opts.CreateAdmin()
  762. if result != expected {
  763. t.Fatalf(`Unexpected CREATE_ADMIN value, got %v instead of %v`, result, expected)
  764. }
  765. }
  766. func TestPocketConsumerKeyFromEnvVariable(t *testing.T) {
  767. os.Clearenv()
  768. os.Setenv("POCKET_CONSUMER_KEY", "something")
  769. parser := NewParser()
  770. opts, err := parser.ParseEnvironmentVariables()
  771. if err != nil {
  772. t.Fatalf(`Parsing failure: %v`, err)
  773. }
  774. expected := "something"
  775. result := opts.PocketConsumerKey("default")
  776. if result != expected {
  777. t.Fatalf(`Unexpected POCKET_CONSUMER_KEY value, got %q instead of %q`, result, expected)
  778. }
  779. }
  780. func TestPocketConsumerKeyFromUserPrefs(t *testing.T) {
  781. os.Clearenv()
  782. parser := NewParser()
  783. opts, err := parser.ParseEnvironmentVariables()
  784. if err != nil {
  785. t.Fatalf(`Parsing failure: %v`, err)
  786. }
  787. expected := "default"
  788. result := opts.PocketConsumerKey("default")
  789. if result != expected {
  790. t.Fatalf(`Unexpected POCKET_CONSUMER_KEY value, got %q instead of %q`, result, expected)
  791. }
  792. }
  793. func TestProxyImages(t *testing.T) {
  794. os.Clearenv()
  795. os.Setenv("PROXY_IMAGES", "all")
  796. parser := NewParser()
  797. opts, err := parser.ParseEnvironmentVariables()
  798. if err != nil {
  799. t.Fatalf(`Parsing failure: %v`, err)
  800. }
  801. expected := "all"
  802. result := opts.ProxyImages()
  803. if result != expected {
  804. t.Fatalf(`Unexpected PROXY_IMAGES value, got %q instead of %q`, result, expected)
  805. }
  806. }
  807. func TestDefaultProxyImagesValue(t *testing.T) {
  808. os.Clearenv()
  809. parser := NewParser()
  810. opts, err := parser.ParseEnvironmentVariables()
  811. if err != nil {
  812. t.Fatalf(`Parsing failure: %v`, err)
  813. }
  814. expected := defaultProxyImages
  815. result := opts.ProxyImages()
  816. if result != expected {
  817. t.Fatalf(`Unexpected PROXY_IMAGES value, got %q instead of %q`, result, expected)
  818. }
  819. }
  820. func TestHTTPSOff(t *testing.T) {
  821. os.Clearenv()
  822. parser := NewParser()
  823. opts, err := parser.ParseEnvironmentVariables()
  824. if err != nil {
  825. t.Fatalf(`Parsing failure: %v`, err)
  826. }
  827. if opts.HTTPS {
  828. t.Fatalf(`Unexpected HTTPS value, got "%v"`, opts.HTTPS)
  829. }
  830. }
  831. func TestHTTPSOn(t *testing.T) {
  832. os.Clearenv()
  833. os.Setenv("HTTPS", "on")
  834. parser := NewParser()
  835. opts, err := parser.ParseEnvironmentVariables()
  836. if err != nil {
  837. t.Fatalf(`Parsing failure: %v`, err)
  838. }
  839. if !opts.HTTPS {
  840. t.Fatalf(`Unexpected HTTPS value, got "%v"`, opts.HTTPS)
  841. }
  842. }
  843. func TestHTTPClientTimeout(t *testing.T) {
  844. os.Clearenv()
  845. os.Setenv("HTTP_CLIENT_TIMEOUT", "42")
  846. parser := NewParser()
  847. opts, err := parser.ParseEnvironmentVariables()
  848. if err != nil {
  849. t.Fatalf(`Parsing failure: %v`, err)
  850. }
  851. expected := 42
  852. result := opts.HTTPClientTimeout()
  853. if result != expected {
  854. t.Fatalf(`Unexpected HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected)
  855. }
  856. }
  857. func TestDefaultHTTPClientTimeoutValue(t *testing.T) {
  858. os.Clearenv()
  859. parser := NewParser()
  860. opts, err := parser.ParseEnvironmentVariables()
  861. if err != nil {
  862. t.Fatalf(`Parsing failure: %v`, err)
  863. }
  864. expected := defaultHTTPClientTimeout
  865. result := opts.HTTPClientTimeout()
  866. if result != expected {
  867. t.Fatalf(`Unexpected HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected)
  868. }
  869. }
  870. func TestHTTPClientMaxBodySize(t *testing.T) {
  871. os.Clearenv()
  872. os.Setenv("HTTP_CLIENT_MAX_BODY_SIZE", "42")
  873. parser := NewParser()
  874. opts, err := parser.ParseEnvironmentVariables()
  875. if err != nil {
  876. t.Fatalf(`Parsing failure: %v`, err)
  877. }
  878. expected := int64(42 * 1024 * 1024)
  879. result := opts.HTTPClientMaxBodySize()
  880. if result != expected {
  881. t.Fatalf(`Unexpected HTTP_CLIENT_MAX_BODY_SIZE value, got %d instead of %d`, result, expected)
  882. }
  883. }
  884. func TestDefaultHTTPClientMaxBodySizeValue(t *testing.T) {
  885. os.Clearenv()
  886. parser := NewParser()
  887. opts, err := parser.ParseEnvironmentVariables()
  888. if err != nil {
  889. t.Fatalf(`Parsing failure: %v`, err)
  890. }
  891. expected := int64(defaultHTTPClientMaxBodySize * 1024 * 1024)
  892. result := opts.HTTPClientMaxBodySize()
  893. if result != expected {
  894. t.Fatalf(`Unexpected HTTP_CLIENT_MAX_BODY_SIZE value, got %d instead of %d`, result, expected)
  895. }
  896. }
  897. func TestParseConfigFile(t *testing.T) {
  898. content := []byte(`
  899. # This is a comment
  900. DEBUG = yes
  901. POCKET_CONSUMER_KEY= >#1234
  902. Invalid text
  903. `)
  904. tmpfile, err := ioutil.TempFile(".", "miniflux.*.unit_test.conf")
  905. if err != nil {
  906. t.Fatal(err)
  907. }
  908. if _, err := tmpfile.Write(content); err != nil {
  909. t.Fatal(err)
  910. }
  911. os.Clearenv()
  912. parser := NewParser()
  913. opts, err := parser.ParseFile(tmpfile.Name())
  914. if err != nil {
  915. t.Errorf(`Parsing failure: %v`, err)
  916. }
  917. if opts.HasDebugMode() != true {
  918. t.Errorf(`Unexpected debug mode value, got "%v"`, opts.HasDebugMode())
  919. }
  920. expected := ">#1234"
  921. result := opts.PocketConsumerKey("default")
  922. if result != expected {
  923. t.Errorf(`Unexpected POCKET_CONSUMER_KEY value, got %q instead of %q`, result, expected)
  924. }
  925. if err := tmpfile.Close(); err != nil {
  926. t.Fatal(err)
  927. }
  928. if err := os.Remove(tmpfile.Name()); err != nil {
  929. t.Fatal(err)
  930. }
  931. }