config_test.go 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package config // import "miniflux.app/v2/internal/config"
  4. import (
  5. "bytes"
  6. "os"
  7. "testing"
  8. )
  9. func TestLogFileDefaultValue(t *testing.T) {
  10. os.Clearenv()
  11. parser := NewParser()
  12. opts, err := parser.ParseEnvironmentVariables()
  13. if err != nil {
  14. t.Fatalf(`Parsing failure: %v`, err)
  15. }
  16. if opts.LogFile() != defaultLogFile {
  17. t.Fatalf(`Unexpected log file value, got %q`, opts.LogFile())
  18. }
  19. }
  20. func TestLogFileWithCustomFilename(t *testing.T) {
  21. os.Clearenv()
  22. os.Setenv("LOG_FILE", "foobar.log")
  23. parser := NewParser()
  24. opts, err := parser.ParseEnvironmentVariables()
  25. if err != nil {
  26. t.Fatalf(`Parsing failure: %v`, err)
  27. }
  28. if opts.LogFile() != "foobar.log" {
  29. t.Fatalf(`Unexpected log file value, got %q`, opts.LogFile())
  30. }
  31. }
  32. func TestLogFileWithEmptyValue(t *testing.T) {
  33. os.Clearenv()
  34. os.Setenv("LOG_FILE", "")
  35. parser := NewParser()
  36. opts, err := parser.ParseEnvironmentVariables()
  37. if err != nil {
  38. t.Fatalf(`Parsing failure: %v`, err)
  39. }
  40. if opts.LogFile() != defaultLogFile {
  41. t.Fatalf(`Unexpected log file value, got %q`, opts.LogFile())
  42. }
  43. }
  44. func TestLogLevelDefaultValue(t *testing.T) {
  45. os.Clearenv()
  46. parser := NewParser()
  47. opts, err := parser.ParseEnvironmentVariables()
  48. if err != nil {
  49. t.Fatalf(`Parsing failure: %v`, err)
  50. }
  51. if opts.LogLevel() != defaultLogLevel {
  52. t.Fatalf(`Unexpected log level value, got %q`, opts.LogLevel())
  53. }
  54. }
  55. func TestLogLevelWithCustomValue(t *testing.T) {
  56. os.Clearenv()
  57. os.Setenv("LOG_LEVEL", "warning")
  58. parser := NewParser()
  59. opts, err := parser.ParseEnvironmentVariables()
  60. if err != nil {
  61. t.Fatalf(`Parsing failure: %v`, err)
  62. }
  63. if opts.LogLevel() != "warning" {
  64. t.Fatalf(`Unexpected log level value, got %q`, opts.LogLevel())
  65. }
  66. }
  67. func TestLogLevelWithInvalidValue(t *testing.T) {
  68. os.Clearenv()
  69. os.Setenv("LOG_LEVEL", "invalid")
  70. parser := NewParser()
  71. opts, err := parser.ParseEnvironmentVariables()
  72. if err != nil {
  73. t.Fatalf(`Parsing failure: %v`, err)
  74. }
  75. if opts.LogLevel() != defaultLogLevel {
  76. t.Fatalf(`Unexpected log level value, got %q`, opts.LogLevel())
  77. }
  78. }
  79. func TestLogDateTimeDefaultValue(t *testing.T) {
  80. os.Clearenv()
  81. parser := NewParser()
  82. opts, err := parser.ParseEnvironmentVariables()
  83. if err != nil {
  84. t.Fatalf(`Parsing failure: %v`, err)
  85. }
  86. if opts.LogDateTime() != defaultLogDateTime {
  87. t.Fatalf(`Unexpected log date time value, got %v`, opts.LogDateTime())
  88. }
  89. }
  90. func TestLogDateTimeWithCustomValue(t *testing.T) {
  91. os.Clearenv()
  92. os.Setenv("LOG_DATETIME", "false")
  93. parser := NewParser()
  94. opts, err := parser.ParseEnvironmentVariables()
  95. if err != nil {
  96. t.Fatalf(`Parsing failure: %v`, err)
  97. }
  98. if opts.LogDateTime() != false {
  99. t.Fatalf(`Unexpected log date time value, got %v`, opts.LogDateTime())
  100. }
  101. }
  102. func TestLogDateTimeWithInvalidValue(t *testing.T) {
  103. os.Clearenv()
  104. os.Setenv("LOG_DATETIME", "invalid")
  105. parser := NewParser()
  106. opts, err := parser.ParseEnvironmentVariables()
  107. if err != nil {
  108. t.Fatalf(`Parsing failure: %v`, err)
  109. }
  110. if opts.LogDateTime() != defaultLogDateTime {
  111. t.Fatalf(`Unexpected log date time value, got %v`, opts.LogDateTime())
  112. }
  113. }
  114. func TestLogFormatDefaultValue(t *testing.T) {
  115. os.Clearenv()
  116. parser := NewParser()
  117. opts, err := parser.ParseEnvironmentVariables()
  118. if err != nil {
  119. t.Fatalf(`Parsing failure: %v`, err)
  120. }
  121. if opts.LogFormat() != defaultLogFormat {
  122. t.Fatalf(`Unexpected log format value, got %q`, opts.LogFormat())
  123. }
  124. }
  125. func TestLogFormatWithCustomValue(t *testing.T) {
  126. os.Clearenv()
  127. os.Setenv("LOG_FORMAT", "json")
  128. parser := NewParser()
  129. opts, err := parser.ParseEnvironmentVariables()
  130. if err != nil {
  131. t.Fatalf(`Parsing failure: %v`, err)
  132. }
  133. if opts.LogFormat() != "json" {
  134. t.Fatalf(`Unexpected log format value, got %q`, opts.LogFormat())
  135. }
  136. }
  137. func TestLogFormatWithInvalidValue(t *testing.T) {
  138. os.Clearenv()
  139. os.Setenv("LOG_FORMAT", "invalid")
  140. parser := NewParser()
  141. opts, err := parser.ParseEnvironmentVariables()
  142. if err != nil {
  143. t.Fatalf(`Parsing failure: %v`, err)
  144. }
  145. if opts.LogFormat() != defaultLogFormat {
  146. t.Fatalf(`Unexpected log format value, got %q`, opts.LogFormat())
  147. }
  148. }
  149. func TestCustomBaseURL(t *testing.T) {
  150. os.Clearenv()
  151. os.Setenv("BASE_URL", "http://example.org")
  152. parser := NewParser()
  153. opts, err := parser.ParseEnvironmentVariables()
  154. if err != nil {
  155. t.Fatalf(`Parsing failure: %v`, err)
  156. }
  157. if opts.BaseURL() != "http://example.org" {
  158. t.Fatalf(`Unexpected base URL, got "%s"`, opts.BaseURL())
  159. }
  160. if opts.RootURL() != "http://example.org" {
  161. t.Fatalf(`Unexpected root URL, got "%s"`, opts.RootURL())
  162. }
  163. if opts.BasePath() != "" {
  164. t.Fatalf(`Unexpected base path, got "%s"`, opts.BasePath())
  165. }
  166. }
  167. func TestCustomBaseURLWithTrailingSlash(t *testing.T) {
  168. os.Clearenv()
  169. os.Setenv("BASE_URL", "http://example.org/folder/")
  170. parser := NewParser()
  171. opts, err := parser.ParseEnvironmentVariables()
  172. if err != nil {
  173. t.Fatalf(`Parsing failure: %v`, err)
  174. }
  175. if opts.BaseURL() != "http://example.org/folder" {
  176. t.Fatalf(`Unexpected base URL, got "%s"`, opts.BaseURL())
  177. }
  178. if opts.RootURL() != "http://example.org" {
  179. t.Fatalf(`Unexpected root URL, got "%s"`, opts.RootURL())
  180. }
  181. if opts.BasePath() != "/folder" {
  182. t.Fatalf(`Unexpected base path, got "%s"`, opts.BasePath())
  183. }
  184. }
  185. func TestCustomBaseURLWithCustomPort(t *testing.T) {
  186. os.Clearenv()
  187. os.Setenv("BASE_URL", "http://example.org:88/folder/")
  188. parser := NewParser()
  189. opts, err := parser.ParseEnvironmentVariables()
  190. if err != nil {
  191. t.Fatalf(`Parsing failure: %v`, err)
  192. }
  193. if opts.BaseURL() != "http://example.org:88/folder" {
  194. t.Fatalf(`Unexpected base URL, got "%s"`, opts.BaseURL())
  195. }
  196. if opts.RootURL() != "http://example.org:88" {
  197. t.Fatalf(`Unexpected root URL, got "%s"`, opts.RootURL())
  198. }
  199. if opts.BasePath() != "/folder" {
  200. t.Fatalf(`Unexpected base path, got "%s"`, opts.BasePath())
  201. }
  202. }
  203. func TestBaseURLWithoutScheme(t *testing.T) {
  204. os.Clearenv()
  205. os.Setenv("BASE_URL", "example.org/folder/")
  206. _, err := NewParser().ParseEnvironmentVariables()
  207. if err == nil {
  208. t.Fatalf(`Parsing must fail`)
  209. }
  210. }
  211. func TestBaseURLWithInvalidScheme(t *testing.T) {
  212. os.Clearenv()
  213. os.Setenv("BASE_URL", "ftp://example.org/folder/")
  214. _, err := NewParser().ParseEnvironmentVariables()
  215. if err == nil {
  216. t.Fatalf(`Parsing must fail`)
  217. }
  218. }
  219. func TestInvalidBaseURL(t *testing.T) {
  220. os.Clearenv()
  221. os.Setenv("BASE_URL", "http://example|org")
  222. _, err := NewParser().ParseEnvironmentVariables()
  223. if err == nil {
  224. t.Fatalf(`Parsing must fail`)
  225. }
  226. }
  227. func TestDefaultBaseURL(t *testing.T) {
  228. os.Clearenv()
  229. parser := NewParser()
  230. opts, err := parser.ParseEnvironmentVariables()
  231. if err != nil {
  232. t.Fatalf(`Parsing failure: %v`, err)
  233. }
  234. if opts.BaseURL() != defaultBaseURL {
  235. t.Fatalf(`Unexpected base URL, got "%s"`, opts.BaseURL())
  236. }
  237. if opts.RootURL() != defaultBaseURL {
  238. t.Fatalf(`Unexpected root URL, got "%s"`, opts.RootURL())
  239. }
  240. if opts.BasePath() != "" {
  241. t.Fatalf(`Unexpected base path, got "%s"`, opts.BasePath())
  242. }
  243. }
  244. func TestDatabaseURL(t *testing.T) {
  245. os.Clearenv()
  246. os.Setenv("DATABASE_URL", "foobar")
  247. parser := NewParser()
  248. opts, err := parser.ParseEnvironmentVariables()
  249. if err != nil {
  250. t.Fatalf(`Parsing failure: %v`, err)
  251. }
  252. expected := "foobar"
  253. result := opts.DatabaseURL()
  254. if result != expected {
  255. t.Errorf(`Unexpected DATABASE_URL value, got %q instead of %q`, result, expected)
  256. }
  257. if opts.IsDefaultDatabaseURL() {
  258. t.Errorf(`This is not the default database URL and it should returns false`)
  259. }
  260. }
  261. func TestDefaultDatabaseURLValue(t *testing.T) {
  262. os.Clearenv()
  263. parser := NewParser()
  264. opts, err := parser.ParseEnvironmentVariables()
  265. if err != nil {
  266. t.Fatalf(`Parsing failure: %v`, err)
  267. }
  268. expected := defaultDatabaseURL
  269. result := opts.DatabaseURL()
  270. if result != expected {
  271. t.Errorf(`Unexpected DATABASE_URL value, got %q instead of %q`, result, expected)
  272. }
  273. if !opts.IsDefaultDatabaseURL() {
  274. t.Errorf(`This is the default database URL and it should returns true`)
  275. }
  276. }
  277. func TestDefaultDatabaseMaxConnsValue(t *testing.T) {
  278. os.Clearenv()
  279. parser := NewParser()
  280. opts, err := parser.ParseEnvironmentVariables()
  281. if err != nil {
  282. t.Fatalf(`Parsing failure: %v`, err)
  283. }
  284. expected := defaultDatabaseMaxConns
  285. result := opts.DatabaseMaxConns()
  286. if result != expected {
  287. t.Fatalf(`Unexpected DATABASE_MAX_CONNS value, got %v instead of %v`, result, expected)
  288. }
  289. }
  290. func TestDatabaseMaxConns(t *testing.T) {
  291. os.Clearenv()
  292. os.Setenv("DATABASE_MAX_CONNS", "42")
  293. parser := NewParser()
  294. opts, err := parser.ParseEnvironmentVariables()
  295. if err != nil {
  296. t.Fatalf(`Parsing failure: %v`, err)
  297. }
  298. expected := 42
  299. result := opts.DatabaseMaxConns()
  300. if result != expected {
  301. t.Fatalf(`Unexpected DATABASE_MAX_CONNS value, got %v instead of %v`, result, expected)
  302. }
  303. }
  304. func TestDefaultDatabaseMinConnsValue(t *testing.T) {
  305. os.Clearenv()
  306. parser := NewParser()
  307. opts, err := parser.ParseEnvironmentVariables()
  308. if err != nil {
  309. t.Fatalf(`Parsing failure: %v`, err)
  310. }
  311. expected := defaultDatabaseMinConns
  312. result := opts.DatabaseMinConns()
  313. if result != expected {
  314. t.Fatalf(`Unexpected DATABASE_MIN_CONNS value, got %v instead of %v`, result, expected)
  315. }
  316. }
  317. func TestDatabaseMinConns(t *testing.T) {
  318. os.Clearenv()
  319. os.Setenv("DATABASE_MIN_CONNS", "42")
  320. parser := NewParser()
  321. opts, err := parser.ParseEnvironmentVariables()
  322. if err != nil {
  323. t.Fatalf(`Parsing failure: %v`, err)
  324. }
  325. expected := 42
  326. result := opts.DatabaseMinConns()
  327. if result != expected {
  328. t.Fatalf(`Unexpected DATABASE_MIN_CONNS value, got %v instead of %v`, result, expected)
  329. }
  330. }
  331. func TestListenAddr(t *testing.T) {
  332. os.Clearenv()
  333. os.Setenv("LISTEN_ADDR", "foobar")
  334. parser := NewParser()
  335. opts, err := parser.ParseEnvironmentVariables()
  336. if err != nil {
  337. t.Fatalf(`Parsing failure: %v`, err)
  338. }
  339. expected := "foobar"
  340. result := opts.ListenAddr()
  341. if result != expected {
  342. t.Fatalf(`Unexpected LISTEN_ADDR value, got %q instead of %q`, result, expected)
  343. }
  344. }
  345. func TestListenAddrWithPortDefined(t *testing.T) {
  346. os.Clearenv()
  347. os.Setenv("PORT", "3000")
  348. os.Setenv("LISTEN_ADDR", "foobar")
  349. parser := NewParser()
  350. opts, err := parser.ParseEnvironmentVariables()
  351. if err != nil {
  352. t.Fatalf(`Parsing failure: %v`, err)
  353. }
  354. expected := ":3000"
  355. result := opts.ListenAddr()
  356. if result != expected {
  357. t.Fatalf(`Unexpected LISTEN_ADDR value, got %q instead of %q`, result, expected)
  358. }
  359. }
  360. func TestDefaultListenAddrValue(t *testing.T) {
  361. os.Clearenv()
  362. parser := NewParser()
  363. opts, err := parser.ParseEnvironmentVariables()
  364. if err != nil {
  365. t.Fatalf(`Parsing failure: %v`, err)
  366. }
  367. expected := defaultListenAddr
  368. result := opts.ListenAddr()
  369. if result != expected {
  370. t.Fatalf(`Unexpected LISTEN_ADDR value, got %q instead of %q`, result, expected)
  371. }
  372. }
  373. func TestCertFile(t *testing.T) {
  374. os.Clearenv()
  375. os.Setenv("CERT_FILE", "foobar")
  376. parser := NewParser()
  377. opts, err := parser.ParseEnvironmentVariables()
  378. if err != nil {
  379. t.Fatalf(`Parsing failure: %v`, err)
  380. }
  381. expected := "foobar"
  382. result := opts.CertFile()
  383. if result != expected {
  384. t.Fatalf(`Unexpected CERT_FILE value, got %q instead of %q`, result, expected)
  385. }
  386. }
  387. func TestDefaultCertFileValue(t *testing.T) {
  388. os.Clearenv()
  389. parser := NewParser()
  390. opts, err := parser.ParseEnvironmentVariables()
  391. if err != nil {
  392. t.Fatalf(`Parsing failure: %v`, err)
  393. }
  394. expected := defaultCertFile
  395. result := opts.CertFile()
  396. if result != expected {
  397. t.Fatalf(`Unexpected CERT_FILE value, got %q instead of %q`, result, expected)
  398. }
  399. }
  400. func TestKeyFile(t *testing.T) {
  401. os.Clearenv()
  402. os.Setenv("KEY_FILE", "foobar")
  403. parser := NewParser()
  404. opts, err := parser.ParseEnvironmentVariables()
  405. if err != nil {
  406. t.Fatalf(`Parsing failure: %v`, err)
  407. }
  408. expected := "foobar"
  409. result := opts.CertKeyFile()
  410. if result != expected {
  411. t.Fatalf(`Unexpected KEY_FILE value, got %q instead of %q`, result, expected)
  412. }
  413. }
  414. func TestDefaultKeyFileValue(t *testing.T) {
  415. os.Clearenv()
  416. parser := NewParser()
  417. opts, err := parser.ParseEnvironmentVariables()
  418. if err != nil {
  419. t.Fatalf(`Parsing failure: %v`, err)
  420. }
  421. expected := defaultKeyFile
  422. result := opts.CertKeyFile()
  423. if result != expected {
  424. t.Fatalf(`Unexpected KEY_FILE value, got %q instead of %q`, result, expected)
  425. }
  426. }
  427. func TestCertDomain(t *testing.T) {
  428. os.Clearenv()
  429. os.Setenv("CERT_DOMAIN", "example.org")
  430. parser := NewParser()
  431. opts, err := parser.ParseEnvironmentVariables()
  432. if err != nil {
  433. t.Fatalf(`Parsing failure: %v`, err)
  434. }
  435. expected := "example.org"
  436. result := opts.CertDomain()
  437. if result != expected {
  438. t.Fatalf(`Unexpected CERT_DOMAIN value, got %q instead of %q`, result, expected)
  439. }
  440. }
  441. func TestDefaultCertDomainValue(t *testing.T) {
  442. os.Clearenv()
  443. parser := NewParser()
  444. opts, err := parser.ParseEnvironmentVariables()
  445. if err != nil {
  446. t.Fatalf(`Parsing failure: %v`, err)
  447. }
  448. expected := defaultCertDomain
  449. result := opts.CertDomain()
  450. if result != expected {
  451. t.Fatalf(`Unexpected CERT_DOMAIN value, got %q instead of %q`, result, expected)
  452. }
  453. }
  454. func TestDefaultCleanupFrequencyHoursValue(t *testing.T) {
  455. os.Clearenv()
  456. parser := NewParser()
  457. opts, err := parser.ParseEnvironmentVariables()
  458. if err != nil {
  459. t.Fatalf(`Parsing failure: %v`, err)
  460. }
  461. expected := defaultCleanupFrequencyHours
  462. result := opts.CleanupFrequencyHours()
  463. if result != expected {
  464. t.Fatalf(`Unexpected CLEANUP_FREQUENCY_HOURS value, got %v instead of %v`, result, expected)
  465. }
  466. }
  467. func TestCleanupFrequencyHours(t *testing.T) {
  468. os.Clearenv()
  469. os.Setenv("CLEANUP_FREQUENCY_HOURS", "42")
  470. os.Setenv("CLEANUP_FREQUENCY", "19")
  471. parser := NewParser()
  472. opts, err := parser.ParseEnvironmentVariables()
  473. if err != nil {
  474. t.Fatalf(`Parsing failure: %v`, err)
  475. }
  476. expected := 42
  477. result := opts.CleanupFrequencyHours()
  478. if result != expected {
  479. t.Fatalf(`Unexpected CLEANUP_FREQUENCY_HOURS value, got %v instead of %v`, result, expected)
  480. }
  481. }
  482. func TestDefaultCleanupArchiveReadDaysValue(t *testing.T) {
  483. os.Clearenv()
  484. parser := NewParser()
  485. opts, err := parser.ParseEnvironmentVariables()
  486. if err != nil {
  487. t.Fatalf(`Parsing failure: %v`, err)
  488. }
  489. expected := 60
  490. result := opts.CleanupArchiveReadDays()
  491. if result != expected {
  492. t.Fatalf(`Unexpected CLEANUP_ARCHIVE_READ_DAYS value, got %v instead of %v`, result, expected)
  493. }
  494. }
  495. func TestCleanupArchiveReadDays(t *testing.T) {
  496. os.Clearenv()
  497. os.Setenv("CLEANUP_ARCHIVE_READ_DAYS", "7")
  498. os.Setenv("ARCHIVE_READ_DAYS", "19")
  499. parser := NewParser()
  500. opts, err := parser.ParseEnvironmentVariables()
  501. if err != nil {
  502. t.Fatalf(`Parsing failure: %v`, err)
  503. }
  504. expected := 7
  505. result := opts.CleanupArchiveReadDays()
  506. if result != expected {
  507. t.Fatalf(`Unexpected CLEANUP_ARCHIVE_READ_DAYS value, got %v instead of %v`, result, expected)
  508. }
  509. }
  510. func TestDefaultCleanupRemoveSessionsDaysValue(t *testing.T) {
  511. os.Clearenv()
  512. parser := NewParser()
  513. opts, err := parser.ParseEnvironmentVariables()
  514. if err != nil {
  515. t.Fatalf(`Parsing failure: %v`, err)
  516. }
  517. expected := 30
  518. result := opts.CleanupRemoveSessionsDays()
  519. if result != expected {
  520. t.Fatalf(`Unexpected CLEANUP_REMOVE_SESSIONS_DAYS value, got %v instead of %v`, result, expected)
  521. }
  522. }
  523. func TestCleanupRemoveSessionsDays(t *testing.T) {
  524. os.Clearenv()
  525. os.Setenv("CLEANUP_REMOVE_SESSIONS_DAYS", "7")
  526. parser := NewParser()
  527. opts, err := parser.ParseEnvironmentVariables()
  528. if err != nil {
  529. t.Fatalf(`Parsing failure: %v`, err)
  530. }
  531. expected := 7
  532. result := opts.CleanupRemoveSessionsDays()
  533. if result != expected {
  534. t.Fatalf(`Unexpected CLEANUP_REMOVE_SESSIONS_DAYS value, got %v instead of %v`, result, expected)
  535. }
  536. }
  537. func TestDefaultWorkerPoolSizeValue(t *testing.T) {
  538. os.Clearenv()
  539. parser := NewParser()
  540. opts, err := parser.ParseEnvironmentVariables()
  541. if err != nil {
  542. t.Fatalf(`Parsing failure: %v`, err)
  543. }
  544. expected := defaultWorkerPoolSize
  545. result := opts.WorkerPoolSize()
  546. if result != expected {
  547. t.Fatalf(`Unexpected WORKER_POOL_SIZE value, got %v instead of %v`, result, expected)
  548. }
  549. }
  550. func TestWorkerPoolSize(t *testing.T) {
  551. os.Clearenv()
  552. os.Setenv("WORKER_POOL_SIZE", "42")
  553. parser := NewParser()
  554. opts, err := parser.ParseEnvironmentVariables()
  555. if err != nil {
  556. t.Fatalf(`Parsing failure: %v`, err)
  557. }
  558. expected := 42
  559. result := opts.WorkerPoolSize()
  560. if result != expected {
  561. t.Fatalf(`Unexpected WORKER_POOL_SIZE value, got %v instead of %v`, result, expected)
  562. }
  563. }
  564. func TestDefautPollingFrequencyValue(t *testing.T) {
  565. os.Clearenv()
  566. parser := NewParser()
  567. opts, err := parser.ParseEnvironmentVariables()
  568. if err != nil {
  569. t.Fatalf(`Parsing failure: %v`, err)
  570. }
  571. expected := defaultPollingFrequency
  572. result := opts.PollingFrequency()
  573. if result != expected {
  574. t.Fatalf(`Unexpected POLLING_FREQUENCY value, got %v instead of %v`, result, expected)
  575. }
  576. }
  577. func TestPollingFrequency(t *testing.T) {
  578. os.Clearenv()
  579. os.Setenv("POLLING_FREQUENCY", "42")
  580. parser := NewParser()
  581. opts, err := parser.ParseEnvironmentVariables()
  582. if err != nil {
  583. t.Fatalf(`Parsing failure: %v`, err)
  584. }
  585. expected := 42
  586. result := opts.PollingFrequency()
  587. if result != expected {
  588. t.Fatalf(`Unexpected POLLING_FREQUENCY value, got %v instead of %v`, result, expected)
  589. }
  590. }
  591. func TestDefautForceRefreshInterval(t *testing.T) {
  592. os.Clearenv()
  593. parser := NewParser()
  594. opts, err := parser.ParseEnvironmentVariables()
  595. if err != nil {
  596. t.Fatalf(`Parsing failure: %v`, err)
  597. }
  598. expected := defaultForceRefreshInterval
  599. result := opts.ForceRefreshInterval()
  600. if result != expected {
  601. t.Fatalf(`Unexpected FORCE_REFRESH_INTERVAL value, got %v instead of %v`, result, expected)
  602. }
  603. }
  604. func TestForceRefreshInterval(t *testing.T) {
  605. os.Clearenv()
  606. os.Setenv("FORCE_REFRESH_INTERVAL", "42")
  607. parser := NewParser()
  608. opts, err := parser.ParseEnvironmentVariables()
  609. if err != nil {
  610. t.Fatalf(`Parsing failure: %v`, err)
  611. }
  612. expected := 42
  613. result := opts.ForceRefreshInterval()
  614. if result != expected {
  615. t.Fatalf(`Unexpected FORCE_REFRESH_INTERVAL value, got %v instead of %v`, result, expected)
  616. }
  617. }
  618. func TestDefaultBatchSizeValue(t *testing.T) {
  619. os.Clearenv()
  620. parser := NewParser()
  621. opts, err := parser.ParseEnvironmentVariables()
  622. if err != nil {
  623. t.Fatalf(`Parsing failure: %v`, err)
  624. }
  625. expected := defaultBatchSize
  626. result := opts.BatchSize()
  627. if result != expected {
  628. t.Fatalf(`Unexpected BATCH_SIZE value, got %v instead of %v`, result, expected)
  629. }
  630. }
  631. func TestBatchSize(t *testing.T) {
  632. os.Clearenv()
  633. os.Setenv("BATCH_SIZE", "42")
  634. parser := NewParser()
  635. opts, err := parser.ParseEnvironmentVariables()
  636. if err != nil {
  637. t.Fatalf(`Parsing failure: %v`, err)
  638. }
  639. expected := 42
  640. result := opts.BatchSize()
  641. if result != expected {
  642. t.Fatalf(`Unexpected BATCH_SIZE value, got %v instead of %v`, result, expected)
  643. }
  644. }
  645. func TestDefautPollingSchedulerValue(t *testing.T) {
  646. os.Clearenv()
  647. parser := NewParser()
  648. opts, err := parser.ParseEnvironmentVariables()
  649. if err != nil {
  650. t.Fatalf(`Parsing failure: %v`, err)
  651. }
  652. expected := defaultPollingScheduler
  653. result := opts.PollingScheduler()
  654. if result != expected {
  655. t.Fatalf(`Unexpected POLLING_SCHEDULER value, got %v instead of %v`, result, expected)
  656. }
  657. }
  658. func TestPollingScheduler(t *testing.T) {
  659. os.Clearenv()
  660. os.Setenv("POLLING_SCHEDULER", "entry_count_based")
  661. parser := NewParser()
  662. opts, err := parser.ParseEnvironmentVariables()
  663. if err != nil {
  664. t.Fatalf(`Parsing failure: %v`, err)
  665. }
  666. expected := "entry_count_based"
  667. result := opts.PollingScheduler()
  668. if result != expected {
  669. t.Fatalf(`Unexpected POLLING_SCHEDULER value, got %v instead of %v`, result, expected)
  670. }
  671. }
  672. func TestDefautSchedulerEntryFrequencyMaxIntervalValue(t *testing.T) {
  673. os.Clearenv()
  674. parser := NewParser()
  675. opts, err := parser.ParseEnvironmentVariables()
  676. if err != nil {
  677. t.Fatalf(`Parsing failure: %v`, err)
  678. }
  679. expected := defaultSchedulerEntryFrequencyMaxInterval
  680. result := opts.SchedulerEntryFrequencyMaxInterval()
  681. if result != expected {
  682. t.Fatalf(`Unexpected SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL value, got %v instead of %v`, result, expected)
  683. }
  684. }
  685. func TestSchedulerEntryFrequencyMaxInterval(t *testing.T) {
  686. os.Clearenv()
  687. os.Setenv("SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL", "30")
  688. parser := NewParser()
  689. opts, err := parser.ParseEnvironmentVariables()
  690. if err != nil {
  691. t.Fatalf(`Parsing failure: %v`, err)
  692. }
  693. expected := 30
  694. result := opts.SchedulerEntryFrequencyMaxInterval()
  695. if result != expected {
  696. t.Fatalf(`Unexpected SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL value, got %v instead of %v`, result, expected)
  697. }
  698. }
  699. func TestDefautSchedulerEntryFrequencyMinIntervalValue(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 := defaultSchedulerEntryFrequencyMinInterval
  707. result := opts.SchedulerEntryFrequencyMinInterval()
  708. if result != expected {
  709. t.Fatalf(`Unexpected SCHEDULER_ENTRY_FREQUENCY_MIN_INTERVAL value, got %v instead of %v`, result, expected)
  710. }
  711. }
  712. func TestSchedulerEntryFrequencyMinInterval(t *testing.T) {
  713. os.Clearenv()
  714. os.Setenv("SCHEDULER_ENTRY_FREQUENCY_MIN_INTERVAL", "30")
  715. parser := NewParser()
  716. opts, err := parser.ParseEnvironmentVariables()
  717. if err != nil {
  718. t.Fatalf(`Parsing failure: %v`, err)
  719. }
  720. expected := 30
  721. result := opts.SchedulerEntryFrequencyMinInterval()
  722. if result != expected {
  723. t.Fatalf(`Unexpected SCHEDULER_ENTRY_FREQUENCY_MIN_INTERVAL value, got %v instead of %v`, result, expected)
  724. }
  725. }
  726. func TestDefautSchedulerEntryFrequencyFactorValue(t *testing.T) {
  727. os.Clearenv()
  728. parser := NewParser()
  729. opts, err := parser.ParseEnvironmentVariables()
  730. if err != nil {
  731. t.Fatalf(`Parsing failure: %v`, err)
  732. }
  733. expected := defaultSchedulerEntryFrequencyFactor
  734. result := opts.SchedulerEntryFrequencyFactor()
  735. if result != expected {
  736. t.Fatalf(`Unexpected SCHEDULER_ENTRY_FREQUENCY_FACTOR value, got %v instead of %v`, result, expected)
  737. }
  738. }
  739. func TestSchedulerEntryFrequencyFactor(t *testing.T) {
  740. os.Clearenv()
  741. os.Setenv("SCHEDULER_ENTRY_FREQUENCY_FACTOR", "2")
  742. parser := NewParser()
  743. opts, err := parser.ParseEnvironmentVariables()
  744. if err != nil {
  745. t.Fatalf(`Parsing failure: %v`, err)
  746. }
  747. expected := 2
  748. result := opts.SchedulerEntryFrequencyFactor()
  749. if result != expected {
  750. t.Fatalf(`Unexpected SCHEDULER_ENTRY_FREQUENCY_FACTOR value, got %v instead of %v`, result, expected)
  751. }
  752. }
  753. func TestDefaultSchedulerRoundRobinValue(t *testing.T) {
  754. os.Clearenv()
  755. parser := NewParser()
  756. opts, err := parser.ParseEnvironmentVariables()
  757. if err != nil {
  758. t.Fatalf(`Parsing failure: %v`, err)
  759. }
  760. expected := defaultSchedulerRoundRobinMinInterval
  761. result := opts.SchedulerRoundRobinMinInterval()
  762. if result != expected {
  763. t.Fatalf(`Unexpected SCHEDULER_ROUND_ROBIN_MIN_INTERVAL value, got %v instead of %v`, result, expected)
  764. }
  765. }
  766. func TestSchedulerRoundRobin(t *testing.T) {
  767. os.Clearenv()
  768. os.Setenv("SCHEDULER_ROUND_ROBIN_MIN_INTERVAL", "15")
  769. parser := NewParser()
  770. opts, err := parser.ParseEnvironmentVariables()
  771. if err != nil {
  772. t.Fatalf(`Parsing failure: %v`, err)
  773. }
  774. expected := 15
  775. result := opts.SchedulerRoundRobinMinInterval()
  776. if result != expected {
  777. t.Fatalf(`Unexpected SCHEDULER_ROUND_ROBIN_MIN_INTERVAL value, got %v instead of %v`, result, expected)
  778. }
  779. }
  780. func TestDefaultSchedulerRoundRobinMaxIntervalValue(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 := defaultSchedulerRoundRobinMaxInterval
  788. result := opts.SchedulerRoundRobinMaxInterval()
  789. if result != expected {
  790. t.Fatalf(`Unexpected SCHEDULER_ROUND_ROBIN_MAX_INTERVAL value, got %v instead of %v`, result, expected)
  791. }
  792. }
  793. func TestSchedulerRoundRobinMaxInterval(t *testing.T) {
  794. os.Clearenv()
  795. os.Setenv("SCHEDULER_ROUND_ROBIN_MAX_INTERVAL", "150")
  796. parser := NewParser()
  797. opts, err := parser.ParseEnvironmentVariables()
  798. if err != nil {
  799. t.Fatalf(`Parsing failure: %v`, err)
  800. }
  801. expected := 150
  802. result := opts.SchedulerRoundRobinMaxInterval()
  803. if result != expected {
  804. t.Fatalf(`Unexpected SCHEDULER_ROUND_ROBIN_MAX_INTERVAL value, got %v instead of %v`, result, expected)
  805. }
  806. }
  807. func TestPollingParsingErrorLimit(t *testing.T) {
  808. os.Clearenv()
  809. os.Setenv("POLLING_PARSING_ERROR_LIMIT", "100")
  810. parser := NewParser()
  811. opts, err := parser.ParseEnvironmentVariables()
  812. if err != nil {
  813. t.Fatalf(`Parsing failure: %v`, err)
  814. }
  815. expected := 100
  816. result := opts.PollingParsingErrorLimit()
  817. if result != expected {
  818. t.Fatalf(`Unexpected POLLING_SCHEDULER value, got %v instead of %v`, result, expected)
  819. }
  820. }
  821. func TestOAuth2UserCreationWhenUnset(t *testing.T) {
  822. os.Clearenv()
  823. parser := NewParser()
  824. opts, err := parser.ParseEnvironmentVariables()
  825. if err != nil {
  826. t.Fatalf(`Parsing failure: %v`, err)
  827. }
  828. expected := false
  829. result := opts.IsOAuth2UserCreationAllowed()
  830. if result != expected {
  831. t.Fatalf(`Unexpected OAUTH2_USER_CREATION value, got %v instead of %v`, result, expected)
  832. }
  833. }
  834. func TestOAuth2UserCreationAdmin(t *testing.T) {
  835. os.Clearenv()
  836. os.Setenv("OAUTH2_USER_CREATION", "1")
  837. parser := NewParser()
  838. opts, err := parser.ParseEnvironmentVariables()
  839. if err != nil {
  840. t.Fatalf(`Parsing failure: %v`, err)
  841. }
  842. expected := true
  843. result := opts.IsOAuth2UserCreationAllowed()
  844. if result != expected {
  845. t.Fatalf(`Unexpected OAUTH2_USER_CREATION value, got %v instead of %v`, result, expected)
  846. }
  847. }
  848. func TestOAuth2ClientID(t *testing.T) {
  849. os.Clearenv()
  850. os.Setenv("OAUTH2_CLIENT_ID", "foobar")
  851. parser := NewParser()
  852. opts, err := parser.ParseEnvironmentVariables()
  853. if err != nil {
  854. t.Fatalf(`Parsing failure: %v`, err)
  855. }
  856. expected := "foobar"
  857. result := opts.OAuth2ClientID()
  858. if result != expected {
  859. t.Fatalf(`Unexpected OAUTH2_CLIENT_ID value, got %q instead of %q`, result, expected)
  860. }
  861. }
  862. func TestDefaultOAuth2ClientIDValue(t *testing.T) {
  863. os.Clearenv()
  864. parser := NewParser()
  865. opts, err := parser.ParseEnvironmentVariables()
  866. if err != nil {
  867. t.Fatalf(`Parsing failure: %v`, err)
  868. }
  869. expected := defaultOAuth2ClientID
  870. result := opts.OAuth2ClientID()
  871. if result != expected {
  872. t.Fatalf(`Unexpected OAUTH2_CLIENT_ID value, got %q instead of %q`, result, expected)
  873. }
  874. }
  875. func TestOAuth2ClientSecret(t *testing.T) {
  876. os.Clearenv()
  877. os.Setenv("OAUTH2_CLIENT_SECRET", "secret")
  878. parser := NewParser()
  879. opts, err := parser.ParseEnvironmentVariables()
  880. if err != nil {
  881. t.Fatalf(`Parsing failure: %v`, err)
  882. }
  883. expected := "secret"
  884. result := opts.OAuth2ClientSecret()
  885. if result != expected {
  886. t.Fatalf(`Unexpected OAUTH2_CLIENT_SECRET value, got %q instead of %q`, result, expected)
  887. }
  888. }
  889. func TestDefaultOAuth2ClientSecretValue(t *testing.T) {
  890. os.Clearenv()
  891. parser := NewParser()
  892. opts, err := parser.ParseEnvironmentVariables()
  893. if err != nil {
  894. t.Fatalf(`Parsing failure: %v`, err)
  895. }
  896. expected := defaultOAuth2ClientSecret
  897. result := opts.OAuth2ClientSecret()
  898. if result != expected {
  899. t.Fatalf(`Unexpected OAUTH2_CLIENT_SECRET value, got %q instead of %q`, result, expected)
  900. }
  901. }
  902. func TestOAuth2RedirectURL(t *testing.T) {
  903. os.Clearenv()
  904. os.Setenv("OAUTH2_REDIRECT_URL", "http://example.org")
  905. parser := NewParser()
  906. opts, err := parser.ParseEnvironmentVariables()
  907. if err != nil {
  908. t.Fatalf(`Parsing failure: %v`, err)
  909. }
  910. expected := "http://example.org"
  911. result := opts.OAuth2RedirectURL()
  912. if result != expected {
  913. t.Fatalf(`Unexpected OAUTH2_REDIRECT_URL value, got %q instead of %q`, result, expected)
  914. }
  915. }
  916. func TestDefaultOAuth2RedirectURLValue(t *testing.T) {
  917. os.Clearenv()
  918. parser := NewParser()
  919. opts, err := parser.ParseEnvironmentVariables()
  920. if err != nil {
  921. t.Fatalf(`Parsing failure: %v`, err)
  922. }
  923. expected := defaultOAuth2RedirectURL
  924. result := opts.OAuth2RedirectURL()
  925. if result != expected {
  926. t.Fatalf(`Unexpected OAUTH2_REDIRECT_URL value, got %q instead of %q`, result, expected)
  927. }
  928. }
  929. func TestOAuth2OIDCDiscoveryEndpoint(t *testing.T) {
  930. os.Clearenv()
  931. os.Setenv("OAUTH2_OIDC_DISCOVERY_ENDPOINT", "http://example.org")
  932. parser := NewParser()
  933. opts, err := parser.ParseEnvironmentVariables()
  934. if err != nil {
  935. t.Fatalf(`Parsing failure: %v`, err)
  936. }
  937. expected := "http://example.org"
  938. result := opts.OIDCDiscoveryEndpoint()
  939. if result != expected {
  940. t.Fatalf(`Unexpected OAUTH2_OIDC_DISCOVERY_ENDPOINT value, got %q instead of %q`, result, expected)
  941. }
  942. }
  943. func TestDefaultOIDCDiscoveryEndpointValue(t *testing.T) {
  944. os.Clearenv()
  945. parser := NewParser()
  946. opts, err := parser.ParseEnvironmentVariables()
  947. if err != nil {
  948. t.Fatalf(`Parsing failure: %v`, err)
  949. }
  950. expected := defaultOAuth2OidcDiscoveryEndpoint
  951. result := opts.OIDCDiscoveryEndpoint()
  952. if result != expected {
  953. t.Fatalf(`Unexpected OAUTH2_OIDC_DISCOVERY_ENDPOINT value, got %q instead of %q`, result, expected)
  954. }
  955. }
  956. func TestOAuth2Provider(t *testing.T) {
  957. os.Clearenv()
  958. os.Setenv("OAUTH2_PROVIDER", "google")
  959. parser := NewParser()
  960. opts, err := parser.ParseEnvironmentVariables()
  961. if err != nil {
  962. t.Fatalf(`Parsing failure: %v`, err)
  963. }
  964. expected := "google"
  965. result := opts.OAuth2Provider()
  966. if result != expected {
  967. t.Fatalf(`Unexpected OAUTH2_PROVIDER value, got %q instead of %q`, result, expected)
  968. }
  969. }
  970. func TestDefaultOAuth2ProviderValue(t *testing.T) {
  971. os.Clearenv()
  972. parser := NewParser()
  973. opts, err := parser.ParseEnvironmentVariables()
  974. if err != nil {
  975. t.Fatalf(`Parsing failure: %v`, err)
  976. }
  977. expected := defaultOAuth2Provider
  978. result := opts.OAuth2Provider()
  979. if result != expected {
  980. t.Fatalf(`Unexpected OAUTH2_PROVIDER value, got %q instead of %q`, result, expected)
  981. }
  982. }
  983. func TestHSTSWhenUnset(t *testing.T) {
  984. os.Clearenv()
  985. parser := NewParser()
  986. opts, err := parser.ParseEnvironmentVariables()
  987. if err != nil {
  988. t.Fatalf(`Parsing failure: %v`, err)
  989. }
  990. expected := true
  991. result := opts.HasHSTS()
  992. if result != expected {
  993. t.Fatalf(`Unexpected DISABLE_HSTS value, got %v instead of %v`, result, expected)
  994. }
  995. }
  996. func TestHSTS(t *testing.T) {
  997. os.Clearenv()
  998. os.Setenv("DISABLE_HSTS", "1")
  999. parser := NewParser()
  1000. opts, err := parser.ParseEnvironmentVariables()
  1001. if err != nil {
  1002. t.Fatalf(`Parsing failure: %v`, err)
  1003. }
  1004. expected := false
  1005. result := opts.HasHSTS()
  1006. if result != expected {
  1007. t.Fatalf(`Unexpected DISABLE_HSTS value, got %v instead of %v`, result, expected)
  1008. }
  1009. }
  1010. func TestDisableHTTPServiceWhenUnset(t *testing.T) {
  1011. os.Clearenv()
  1012. parser := NewParser()
  1013. opts, err := parser.ParseEnvironmentVariables()
  1014. if err != nil {
  1015. t.Fatalf(`Parsing failure: %v`, err)
  1016. }
  1017. expected := true
  1018. result := opts.HasHTTPService()
  1019. if result != expected {
  1020. t.Fatalf(`Unexpected DISABLE_HTTP_SERVICE value, got %v instead of %v`, result, expected)
  1021. }
  1022. }
  1023. func TestDisableHTTPService(t *testing.T) {
  1024. os.Clearenv()
  1025. os.Setenv("DISABLE_HTTP_SERVICE", "1")
  1026. parser := NewParser()
  1027. opts, err := parser.ParseEnvironmentVariables()
  1028. if err != nil {
  1029. t.Fatalf(`Parsing failure: %v`, err)
  1030. }
  1031. expected := false
  1032. result := opts.HasHTTPService()
  1033. if result != expected {
  1034. t.Fatalf(`Unexpected DISABLE_HTTP_SERVICE value, got %v instead of %v`, result, expected)
  1035. }
  1036. }
  1037. func TestDisableSchedulerServiceWhenUnset(t *testing.T) {
  1038. os.Clearenv()
  1039. parser := NewParser()
  1040. opts, err := parser.ParseEnvironmentVariables()
  1041. if err != nil {
  1042. t.Fatalf(`Parsing failure: %v`, err)
  1043. }
  1044. expected := true
  1045. result := opts.HasSchedulerService()
  1046. if result != expected {
  1047. t.Fatalf(`Unexpected DISABLE_SCHEDULER_SERVICE value, got %v instead of %v`, result, expected)
  1048. }
  1049. }
  1050. func TestDisableSchedulerService(t *testing.T) {
  1051. os.Clearenv()
  1052. os.Setenv("DISABLE_SCHEDULER_SERVICE", "1")
  1053. parser := NewParser()
  1054. opts, err := parser.ParseEnvironmentVariables()
  1055. if err != nil {
  1056. t.Fatalf(`Parsing failure: %v`, err)
  1057. }
  1058. expected := false
  1059. result := opts.HasSchedulerService()
  1060. if result != expected {
  1061. t.Fatalf(`Unexpected DISABLE_SCHEDULER_SERVICE value, got %v instead of %v`, result, expected)
  1062. }
  1063. }
  1064. func TestRunMigrationsWhenUnset(t *testing.T) {
  1065. os.Clearenv()
  1066. parser := NewParser()
  1067. opts, err := parser.ParseEnvironmentVariables()
  1068. if err != nil {
  1069. t.Fatalf(`Parsing failure: %v`, err)
  1070. }
  1071. expected := false
  1072. result := opts.RunMigrations()
  1073. if result != expected {
  1074. t.Fatalf(`Unexpected RUN_MIGRATIONS value, got %v instead of %v`, result, expected)
  1075. }
  1076. }
  1077. func TestRunMigrations(t *testing.T) {
  1078. os.Clearenv()
  1079. os.Setenv("RUN_MIGRATIONS", "yes")
  1080. parser := NewParser()
  1081. opts, err := parser.ParseEnvironmentVariables()
  1082. if err != nil {
  1083. t.Fatalf(`Parsing failure: %v`, err)
  1084. }
  1085. expected := true
  1086. result := opts.RunMigrations()
  1087. if result != expected {
  1088. t.Fatalf(`Unexpected RUN_MIGRATIONS value, got %v instead of %v`, result, expected)
  1089. }
  1090. }
  1091. func TestCreateAdminWhenUnset(t *testing.T) {
  1092. os.Clearenv()
  1093. parser := NewParser()
  1094. opts, err := parser.ParseEnvironmentVariables()
  1095. if err != nil {
  1096. t.Fatalf(`Parsing failure: %v`, err)
  1097. }
  1098. expected := false
  1099. result := opts.CreateAdmin()
  1100. if result != expected {
  1101. t.Fatalf(`Unexpected CREATE_ADMIN value, got %v instead of %v`, result, expected)
  1102. }
  1103. }
  1104. func TestCreateAdmin(t *testing.T) {
  1105. os.Clearenv()
  1106. os.Setenv("CREATE_ADMIN", "true")
  1107. parser := NewParser()
  1108. opts, err := parser.ParseEnvironmentVariables()
  1109. if err != nil {
  1110. t.Fatalf(`Parsing failure: %v`, err)
  1111. }
  1112. expected := true
  1113. result := opts.CreateAdmin()
  1114. if result != expected {
  1115. t.Fatalf(`Unexpected CREATE_ADMIN value, got %v instead of %v`, result, expected)
  1116. }
  1117. }
  1118. func TestMediaProxyMode(t *testing.T) {
  1119. os.Clearenv()
  1120. os.Setenv("MEDIA_PROXY_MODE", "all")
  1121. parser := NewParser()
  1122. opts, err := parser.ParseEnvironmentVariables()
  1123. if err != nil {
  1124. t.Fatalf(`Parsing failure: %v`, err)
  1125. }
  1126. expected := "all"
  1127. result := opts.MediaProxyMode()
  1128. if result != expected {
  1129. t.Fatalf(`Unexpected MEDIA_PROXY_MODE value, got %q instead of %q`, result, expected)
  1130. }
  1131. }
  1132. func TestDefaultMediaProxyModeValue(t *testing.T) {
  1133. os.Clearenv()
  1134. parser := NewParser()
  1135. opts, err := parser.ParseEnvironmentVariables()
  1136. if err != nil {
  1137. t.Fatalf(`Parsing failure: %v`, err)
  1138. }
  1139. expected := defaultMediaProxyMode
  1140. result := opts.MediaProxyMode()
  1141. if result != expected {
  1142. t.Fatalf(`Unexpected MEDIA_PROXY_MODE value, got %q instead of %q`, result, expected)
  1143. }
  1144. }
  1145. func TestMediaProxyResourceTypes(t *testing.T) {
  1146. os.Clearenv()
  1147. os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image,audio")
  1148. parser := NewParser()
  1149. opts, err := parser.ParseEnvironmentVariables()
  1150. if err != nil {
  1151. t.Fatalf(`Parsing failure: %v`, err)
  1152. }
  1153. expected := []string{"audio", "image"}
  1154. if len(expected) != len(opts.MediaProxyResourceTypes()) {
  1155. t.Fatalf(`Unexpected MEDIA_PROXY_RESOURCE_TYPES value, got %v instead of %v`, opts.MediaProxyResourceTypes(), expected)
  1156. }
  1157. resultMap := make(map[string]bool)
  1158. for _, mediaType := range opts.MediaProxyResourceTypes() {
  1159. resultMap[mediaType] = true
  1160. }
  1161. for _, mediaType := range expected {
  1162. if !resultMap[mediaType] {
  1163. t.Fatalf(`Unexpected MEDIA_PROXY_RESOURCE_TYPES value, got %v instead of %v`, opts.MediaProxyResourceTypes(), expected)
  1164. }
  1165. }
  1166. }
  1167. func TestMediaProxyResourceTypesWithDuplicatedValues(t *testing.T) {
  1168. os.Clearenv()
  1169. os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image,audio, image")
  1170. parser := NewParser()
  1171. opts, err := parser.ParseEnvironmentVariables()
  1172. if err != nil {
  1173. t.Fatalf(`Parsing failure: %v`, err)
  1174. }
  1175. expected := []string{"audio", "image"}
  1176. if len(expected) != len(opts.MediaProxyResourceTypes()) {
  1177. t.Fatalf(`Unexpected MEDIA_PROXY_RESOURCE_TYPES value, got %v instead of %v`, opts.MediaProxyResourceTypes(), expected)
  1178. }
  1179. resultMap := make(map[string]bool)
  1180. for _, mediaType := range opts.MediaProxyResourceTypes() {
  1181. resultMap[mediaType] = true
  1182. }
  1183. for _, mediaType := range expected {
  1184. if !resultMap[mediaType] {
  1185. t.Fatalf(`Unexpected MEDIA_PROXY_RESOURCE_TYPES value, got %v instead of %v`, opts.MediaProxyResourceTypes(), expected)
  1186. }
  1187. }
  1188. }
  1189. func TestDefaultMediaProxyResourceTypes(t *testing.T) {
  1190. os.Clearenv()
  1191. parser := NewParser()
  1192. opts, err := parser.ParseEnvironmentVariables()
  1193. if err != nil {
  1194. t.Fatalf(`Parsing failure: %v`, err)
  1195. }
  1196. expected := []string{"image"}
  1197. if len(expected) != len(opts.MediaProxyResourceTypes()) {
  1198. t.Fatalf(`Unexpected MEDIA_PROXY_RESOURCE_TYPES value, got %v instead of %v`, opts.MediaProxyResourceTypes(), expected)
  1199. }
  1200. resultMap := make(map[string]bool)
  1201. for _, mediaType := range opts.MediaProxyResourceTypes() {
  1202. resultMap[mediaType] = true
  1203. }
  1204. for _, mediaType := range expected {
  1205. if !resultMap[mediaType] {
  1206. t.Fatalf(`Unexpected MEDIA_PROXY_RESOURCE_TYPES value, got %v instead of %v`, opts.MediaProxyResourceTypes(), expected)
  1207. }
  1208. }
  1209. }
  1210. func TestMediaProxyHTTPClientTimeout(t *testing.T) {
  1211. os.Clearenv()
  1212. os.Setenv("MEDIA_PROXY_HTTP_CLIENT_TIMEOUT", "24")
  1213. parser := NewParser()
  1214. opts, err := parser.ParseEnvironmentVariables()
  1215. if err != nil {
  1216. t.Fatalf(`Parsing failure: %v`, err)
  1217. }
  1218. expected := 24
  1219. result := opts.MediaProxyHTTPClientTimeout()
  1220. if result != expected {
  1221. t.Fatalf(`Unexpected MEDIA_PROXY_HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected)
  1222. }
  1223. }
  1224. func TestDefaultMediaProxyHTTPClientTimeoutValue(t *testing.T) {
  1225. os.Clearenv()
  1226. parser := NewParser()
  1227. opts, err := parser.ParseEnvironmentVariables()
  1228. if err != nil {
  1229. t.Fatalf(`Parsing failure: %v`, err)
  1230. }
  1231. expected := defaultMediaProxyHTTPClientTimeout
  1232. result := opts.MediaProxyHTTPClientTimeout()
  1233. if result != expected {
  1234. t.Fatalf(`Unexpected MEDIA_PROXY_HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected)
  1235. }
  1236. }
  1237. func TestMediaProxyCustomURL(t *testing.T) {
  1238. os.Clearenv()
  1239. os.Setenv("MEDIA_PROXY_CUSTOM_URL", "http://example.org/proxy")
  1240. parser := NewParser()
  1241. opts, err := parser.ParseEnvironmentVariables()
  1242. if err != nil {
  1243. t.Fatalf(`Parsing failure: %v`, err)
  1244. }
  1245. expected := "http://example.org/proxy"
  1246. result := opts.MediaCustomProxyURL()
  1247. if result != expected {
  1248. t.Fatalf(`Unexpected MEDIA_PROXY_CUSTOM_URL value, got %q instead of %q`, result, expected)
  1249. }
  1250. }
  1251. func TestMediaProxyPrivateKey(t *testing.T) {
  1252. os.Clearenv()
  1253. os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "foobar")
  1254. parser := NewParser()
  1255. opts, err := parser.ParseEnvironmentVariables()
  1256. if err != nil {
  1257. t.Fatalf(`Parsing failure: %v`, err)
  1258. }
  1259. expected := []byte("foobar")
  1260. result := opts.MediaProxyPrivateKey()
  1261. if !bytes.Equal(result, expected) {
  1262. t.Fatalf(`Unexpected MEDIA_PROXY_PRIVATE_KEY value, got %q instead of %q`, result, expected)
  1263. }
  1264. }
  1265. func TestHTTPSOff(t *testing.T) {
  1266. os.Clearenv()
  1267. parser := NewParser()
  1268. opts, err := parser.ParseEnvironmentVariables()
  1269. if err != nil {
  1270. t.Fatalf(`Parsing failure: %v`, err)
  1271. }
  1272. if opts.HTTPS {
  1273. t.Fatalf(`Unexpected HTTPS value, got "%v"`, opts.HTTPS)
  1274. }
  1275. }
  1276. func TestHTTPSOn(t *testing.T) {
  1277. os.Clearenv()
  1278. os.Setenv("HTTPS", "on")
  1279. parser := NewParser()
  1280. opts, err := parser.ParseEnvironmentVariables()
  1281. if err != nil {
  1282. t.Fatalf(`Parsing failure: %v`, err)
  1283. }
  1284. if !opts.HTTPS {
  1285. t.Fatalf(`Unexpected HTTPS value, got "%v"`, opts.HTTPS)
  1286. }
  1287. }
  1288. func TestHTTPClientTimeout(t *testing.T) {
  1289. os.Clearenv()
  1290. os.Setenv("HTTP_CLIENT_TIMEOUT", "42")
  1291. parser := NewParser()
  1292. opts, err := parser.ParseEnvironmentVariables()
  1293. if err != nil {
  1294. t.Fatalf(`Parsing failure: %v`, err)
  1295. }
  1296. expected := 42
  1297. result := opts.HTTPClientTimeout()
  1298. if result != expected {
  1299. t.Fatalf(`Unexpected HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected)
  1300. }
  1301. }
  1302. func TestDefaultHTTPClientTimeoutValue(t *testing.T) {
  1303. os.Clearenv()
  1304. parser := NewParser()
  1305. opts, err := parser.ParseEnvironmentVariables()
  1306. if err != nil {
  1307. t.Fatalf(`Parsing failure: %v`, err)
  1308. }
  1309. expected := defaultHTTPClientTimeout
  1310. result := opts.HTTPClientTimeout()
  1311. if result != expected {
  1312. t.Fatalf(`Unexpected HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected)
  1313. }
  1314. }
  1315. func TestHTTPClientMaxBodySize(t *testing.T) {
  1316. os.Clearenv()
  1317. os.Setenv("HTTP_CLIENT_MAX_BODY_SIZE", "42")
  1318. parser := NewParser()
  1319. opts, err := parser.ParseEnvironmentVariables()
  1320. if err != nil {
  1321. t.Fatalf(`Parsing failure: %v`, err)
  1322. }
  1323. expected := int64(42 * 1024 * 1024)
  1324. result := opts.HTTPClientMaxBodySize()
  1325. if result != expected {
  1326. t.Fatalf(`Unexpected HTTP_CLIENT_MAX_BODY_SIZE value, got %d instead of %d`, result, expected)
  1327. }
  1328. }
  1329. func TestDefaultHTTPClientMaxBodySizeValue(t *testing.T) {
  1330. os.Clearenv()
  1331. parser := NewParser()
  1332. opts, err := parser.ParseEnvironmentVariables()
  1333. if err != nil {
  1334. t.Fatalf(`Parsing failure: %v`, err)
  1335. }
  1336. expected := int64(defaultHTTPClientMaxBodySize * 1024 * 1024)
  1337. result := opts.HTTPClientMaxBodySize()
  1338. if result != expected {
  1339. t.Fatalf(`Unexpected HTTP_CLIENT_MAX_BODY_SIZE value, got %d instead of %d`, result, expected)
  1340. }
  1341. }
  1342. func TestHTTPServerTimeout(t *testing.T) {
  1343. os.Clearenv()
  1344. os.Setenv("HTTP_SERVER_TIMEOUT", "342")
  1345. parser := NewParser()
  1346. opts, err := parser.ParseEnvironmentVariables()
  1347. if err != nil {
  1348. t.Fatalf(`Parsing failure: %v`, err)
  1349. }
  1350. expected := 342
  1351. result := opts.HTTPServerTimeout()
  1352. if result != expected {
  1353. t.Fatalf(`Unexpected HTTP_SERVER_TIMEOUT value, got %d instead of %d`, result, expected)
  1354. }
  1355. }
  1356. func TestDefaultHTTPServerTimeoutValue(t *testing.T) {
  1357. os.Clearenv()
  1358. parser := NewParser()
  1359. opts, err := parser.ParseEnvironmentVariables()
  1360. if err != nil {
  1361. t.Fatalf(`Parsing failure: %v`, err)
  1362. }
  1363. expected := defaultHTTPServerTimeout
  1364. result := opts.HTTPServerTimeout()
  1365. if result != expected {
  1366. t.Fatalf(`Unexpected HTTP_SERVER_TIMEOUT value, got %d instead of %d`, result, expected)
  1367. }
  1368. }
  1369. func TestParseConfigFile(t *testing.T) {
  1370. content := []byte(`
  1371. # This is a comment
  1372. LOG_LEVEL = debug
  1373. Invalid text
  1374. `)
  1375. tmpfile, err := os.CreateTemp(".", "miniflux.*.unit_test.conf")
  1376. if err != nil {
  1377. t.Fatal(err)
  1378. }
  1379. if _, err := tmpfile.Write(content); err != nil {
  1380. t.Fatal(err)
  1381. }
  1382. os.Clearenv()
  1383. parser := NewParser()
  1384. opts, err := parser.ParseFile(tmpfile.Name())
  1385. if err != nil {
  1386. t.Errorf(`Parsing failure: %v`, err)
  1387. }
  1388. if opts.LogLevel() != "debug" {
  1389. t.Errorf(`Unexpected log level value, got %q`, opts.LogLevel())
  1390. }
  1391. if err := tmpfile.Close(); err != nil {
  1392. t.Fatal(err)
  1393. }
  1394. if err := os.Remove(tmpfile.Name()); err != nil {
  1395. t.Fatal(err)
  1396. }
  1397. }
  1398. func TestAuthProxyHeader(t *testing.T) {
  1399. os.Clearenv()
  1400. os.Setenv("AUTH_PROXY_HEADER", "X-Forwarded-User")
  1401. parser := NewParser()
  1402. opts, err := parser.ParseEnvironmentVariables()
  1403. if err != nil {
  1404. t.Fatalf(`Parsing failure: %v`, err)
  1405. }
  1406. expected := "X-Forwarded-User"
  1407. result := opts.AuthProxyHeader()
  1408. if result != expected {
  1409. t.Fatalf(`Unexpected AUTH_PROXY_HEADER value, got %q instead of %q`, result, expected)
  1410. }
  1411. }
  1412. func TestDefaultAuthProxyHeaderValue(t *testing.T) {
  1413. os.Clearenv()
  1414. parser := NewParser()
  1415. opts, err := parser.ParseEnvironmentVariables()
  1416. if err != nil {
  1417. t.Fatalf(`Parsing failure: %v`, err)
  1418. }
  1419. expected := defaultAuthProxyHeader
  1420. result := opts.AuthProxyHeader()
  1421. if result != expected {
  1422. t.Fatalf(`Unexpected AUTH_PROXY_HEADER value, got %q instead of %q`, result, expected)
  1423. }
  1424. }
  1425. func TestAuthProxyUserCreationWhenUnset(t *testing.T) {
  1426. os.Clearenv()
  1427. parser := NewParser()
  1428. opts, err := parser.ParseEnvironmentVariables()
  1429. if err != nil {
  1430. t.Fatalf(`Parsing failure: %v`, err)
  1431. }
  1432. expected := false
  1433. result := opts.IsAuthProxyUserCreationAllowed()
  1434. if result != expected {
  1435. t.Fatalf(`Unexpected AUTH_PROXY_USER_CREATION value, got %v instead of %v`, result, expected)
  1436. }
  1437. }
  1438. func TestAuthProxyUserCreationAdmin(t *testing.T) {
  1439. os.Clearenv()
  1440. os.Setenv("AUTH_PROXY_USER_CREATION", "1")
  1441. parser := NewParser()
  1442. opts, err := parser.ParseEnvironmentVariables()
  1443. if err != nil {
  1444. t.Fatalf(`Parsing failure: %v`, err)
  1445. }
  1446. expected := true
  1447. result := opts.IsAuthProxyUserCreationAllowed()
  1448. if result != expected {
  1449. t.Fatalf(`Unexpected AUTH_PROXY_USER_CREATION value, got %v instead of %v`, result, expected)
  1450. }
  1451. }
  1452. func TestFetchBilibiliWatchTime(t *testing.T) {
  1453. os.Clearenv()
  1454. os.Setenv("FETCH_BILIBILI_WATCH_TIME", "1")
  1455. parser := NewParser()
  1456. opts, err := parser.ParseEnvironmentVariables()
  1457. if err != nil {
  1458. t.Fatalf(`Parsing failure: %v`, err)
  1459. }
  1460. expected := true
  1461. result := opts.FetchBilibiliWatchTime()
  1462. if result != expected {
  1463. t.Fatalf(`Unexpected FETCH_BILIBILI_WATCH_TIME value, got %v instead of %v`, result, expected)
  1464. }
  1465. }
  1466. func TestFetchNebulaWatchTime(t *testing.T) {
  1467. os.Clearenv()
  1468. os.Setenv("FETCH_NEBULA_WATCH_TIME", "1")
  1469. parser := NewParser()
  1470. opts, err := parser.ParseEnvironmentVariables()
  1471. if err != nil {
  1472. t.Fatalf(`Parsing failure: %v`, err)
  1473. }
  1474. expected := true
  1475. result := opts.FetchNebulaWatchTime()
  1476. if result != expected {
  1477. t.Fatalf(`Unexpected FETCH_NEBULA_WATCH_TIME value, got %v instead of %v`, result, expected)
  1478. }
  1479. }
  1480. func TestFetchOdyseeWatchTime(t *testing.T) {
  1481. os.Clearenv()
  1482. os.Setenv("FETCH_ODYSEE_WATCH_TIME", "1")
  1483. parser := NewParser()
  1484. opts, err := parser.ParseEnvironmentVariables()
  1485. if err != nil {
  1486. t.Fatalf(`Parsing failure: %v`, err)
  1487. }
  1488. expected := true
  1489. result := opts.FetchOdyseeWatchTime()
  1490. if result != expected {
  1491. t.Fatalf(`Unexpected FETCH_ODYSEE_WATCH_TIME value, got %v instead of %v`, result, expected)
  1492. }
  1493. }
  1494. func TestFetchYouTubeWatchTime(t *testing.T) {
  1495. os.Clearenv()
  1496. os.Setenv("FETCH_YOUTUBE_WATCH_TIME", "1")
  1497. parser := NewParser()
  1498. opts, err := parser.ParseEnvironmentVariables()
  1499. if err != nil {
  1500. t.Fatalf(`Parsing failure: %v`, err)
  1501. }
  1502. expected := true
  1503. result := opts.FetchYouTubeWatchTime()
  1504. if result != expected {
  1505. t.Fatalf(`Unexpected FETCH_YOUTUBE_WATCH_TIME value, got %v instead of %v`, result, expected)
  1506. }
  1507. }
  1508. func TestYouTubeApiKey(t *testing.T) {
  1509. os.Clearenv()
  1510. os.Setenv("YOUTUBE_API_KEY", "AAAAAAAAAAAAAaaaaaaaaaaaaa0000000000000")
  1511. parser := NewParser()
  1512. opts, err := parser.ParseEnvironmentVariables()
  1513. if err != nil {
  1514. t.Fatalf(`Parsing failure: %v`, err)
  1515. }
  1516. expected := "AAAAAAAAAAAAAaaaaaaaaaaaaa0000000000000"
  1517. result := opts.YouTubeApiKey()
  1518. if result != expected {
  1519. t.Fatalf(`Unexpected YOUTUBE_API_KEY value, got %v instead of %v`, result, expected)
  1520. }
  1521. }
  1522. func TestDefaultYouTubeEmbedUrl(t *testing.T) {
  1523. os.Clearenv()
  1524. opts, err := NewParser().ParseEnvironmentVariables()
  1525. if err != nil {
  1526. t.Fatalf(`Parsing failure: %v`, err)
  1527. }
  1528. expected := "https://www.youtube-nocookie.com/embed/"
  1529. result := opts.YouTubeEmbedUrlOverride()
  1530. if result != expected {
  1531. t.Fatalf(`Unexpected default value, got %v instead of %v`, result, expected)
  1532. }
  1533. expected = "www.youtube-nocookie.com"
  1534. result = opts.YouTubeEmbedDomain()
  1535. if result != expected {
  1536. t.Fatalf(`Unexpected YouTube embed domain, got %v instead of %v`, result, expected)
  1537. }
  1538. }
  1539. func TestYouTubeEmbedUrlOverride(t *testing.T) {
  1540. os.Clearenv()
  1541. os.Setenv("YOUTUBE_EMBED_URL_OVERRIDE", "https://invidious.custom/embed/")
  1542. opts, err := NewParser().ParseEnvironmentVariables()
  1543. if err != nil {
  1544. t.Fatalf(`Parsing failure: %v`, err)
  1545. }
  1546. expected := "https://invidious.custom/embed/"
  1547. result := opts.YouTubeEmbedUrlOverride()
  1548. if result != expected {
  1549. t.Fatalf(`Unexpected YOUTUBE_EMBED_URL_OVERRIDE value, got %v instead of %v`, result, expected)
  1550. }
  1551. expected = "invidious.custom"
  1552. result = opts.YouTubeEmbedDomain()
  1553. if result != expected {
  1554. t.Fatalf(`Unexpected YouTube embed domain, got %v instead of %v`, result, expected)
  1555. }
  1556. }
  1557. func TestParseConfigDumpOutput(t *testing.T) {
  1558. os.Clearenv()
  1559. wantOpts := NewOptions()
  1560. wantOpts.adminUsername = "my-username"
  1561. serialized := wantOpts.String()
  1562. tmpfile, err := os.CreateTemp(".", "miniflux.*.unit_test.conf")
  1563. if err != nil {
  1564. t.Fatal(err)
  1565. }
  1566. if _, err := tmpfile.WriteString(serialized); err != nil {
  1567. t.Fatal(err)
  1568. }
  1569. parser := NewParser()
  1570. parsedOpts, err := parser.ParseFile(tmpfile.Name())
  1571. if err != nil {
  1572. t.Errorf(`Parsing failure: %v`, err)
  1573. }
  1574. if parsedOpts.AdminUsername() != wantOpts.AdminUsername() {
  1575. t.Fatalf(`Unexpected ADMIN_USERNAME value, got %q instead of %q`, parsedOpts.AdminUsername(), wantOpts.AdminUsername())
  1576. }
  1577. if err := tmpfile.Close(); err != nil {
  1578. t.Fatal(err)
  1579. }
  1580. if err := os.Remove(tmpfile.Name()); err != nil {
  1581. t.Fatal(err)
  1582. }
  1583. }
  1584. func TestHTTPClientProxies(t *testing.T) {
  1585. os.Clearenv()
  1586. os.Setenv("HTTP_CLIENT_PROXIES", "http://proxy1.example.com,http://proxy2.example.com")
  1587. parser := NewParser()
  1588. opts, err := parser.ParseEnvironmentVariables()
  1589. if err != nil {
  1590. t.Fatalf(`Parsing failure: %v`, err)
  1591. }
  1592. expected := []string{"http://proxy1.example.com", "http://proxy2.example.com"}
  1593. result := opts.HTTPClientProxies()
  1594. if len(expected) != len(result) {
  1595. t.Fatalf(`Unexpected HTTP_CLIENT_PROXIES value, got %v instead of %v`, result, expected)
  1596. }
  1597. for i, proxy := range expected {
  1598. if result[i] != proxy {
  1599. t.Fatalf(`Unexpected HTTP_CLIENT_PROXIES value at index %d, got %q instead of %q`, i, result[i], proxy)
  1600. }
  1601. }
  1602. }
  1603. func TestDefaultHTTPClientProxiesValue(t *testing.T) {
  1604. os.Clearenv()
  1605. parser := NewParser()
  1606. opts, err := parser.ParseEnvironmentVariables()
  1607. if err != nil {
  1608. t.Fatalf(`Parsing failure: %v`, err)
  1609. }
  1610. expected := []string{}
  1611. result := opts.HTTPClientProxies()
  1612. if len(expected) != len(result) {
  1613. t.Fatalf(`Unexpected default HTTP_CLIENT_PROXIES value, got %v instead of %v`, result, expected)
  1614. }
  1615. }
  1616. func TestHTTPClientProxy(t *testing.T) {
  1617. os.Clearenv()
  1618. os.Setenv("HTTP_CLIENT_PROXY", "http://proxy.example.com")
  1619. parser := NewParser()
  1620. opts, err := parser.ParseEnvironmentVariables()
  1621. if err != nil {
  1622. t.Fatalf(`Parsing failure: %v`, err)
  1623. }
  1624. expected := "http://proxy.example.com"
  1625. if opts.HTTPClientProxyURL() == nil || opts.HTTPClientProxyURL().String() != expected {
  1626. t.Fatalf(`Unexpected HTTP_CLIENT_PROXY value, got %v instead of %v`, opts.HTTPClientProxyURL(), expected)
  1627. }
  1628. }
  1629. func TestInvalidHTTPClientProxy(t *testing.T) {
  1630. os.Clearenv()
  1631. os.Setenv("HTTP_CLIENT_PROXY", "sche|me://invalid-proxy-url")
  1632. parser := NewParser()
  1633. _, err := parser.ParseEnvironmentVariables()
  1634. if err == nil {
  1635. t.Fatalf(`Expected error for invalid HTTP_CLIENT_PROXY value, but got none`)
  1636. }
  1637. }