config_test.go 49 KB

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