mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Make environment-to-ini support loading key value from file (#24832)
Replace #19857 Close #19856 Close #10311 Close #10123 Major changes: 1. Move a lot of code from `environment-to-ini.go` to `config_env.go` to make them testable. 2. Add `__FILE` support 3. Update documents 4. Add tests
This commit is contained in:
		
							
								
								
									
										97
									
								
								modules/setting/config_env_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								modules/setting/config_env_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| // Copyright 2023 The Gitea Authors. All rights reserved. | ||||
| // SPDX-License-Identifier: MIT | ||||
|  | ||||
| package setting | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"gopkg.in/ini.v1" | ||||
| ) | ||||
|  | ||||
| func TestDecodeEnvSectionKey(t *testing.T) { | ||||
| 	ok, section, key := decodeEnvSectionKey("SEC__KEY") | ||||
| 	assert.True(t, ok) | ||||
| 	assert.Equal(t, "sec", section) | ||||
| 	assert.Equal(t, "KEY", key) | ||||
|  | ||||
| 	ok, section, key = decodeEnvSectionKey("sec__key") | ||||
| 	assert.True(t, ok) | ||||
| 	assert.Equal(t, "sec", section) | ||||
| 	assert.Equal(t, "key", key) | ||||
|  | ||||
| 	ok, section, key = decodeEnvSectionKey("LOG_0x2E_CONSOLE__STDERR") | ||||
| 	assert.True(t, ok) | ||||
| 	assert.Equal(t, "log.console", section) | ||||
| 	assert.Equal(t, "STDERR", key) | ||||
|  | ||||
| 	ok, section, key = decodeEnvSectionKey("SEC") | ||||
| 	assert.False(t, ok) | ||||
| 	assert.Equal(t, "", section) | ||||
| 	assert.Equal(t, "", key) | ||||
| } | ||||
|  | ||||
| func TestDecodeEnvironmentKey(t *testing.T) { | ||||
| 	prefix := "GITEA__" | ||||
| 	suffix := "__FILE" | ||||
|  | ||||
| 	ok, section, key, file := decodeEnvironmentKey(prefix, suffix, "SEC__KEY") | ||||
| 	assert.False(t, ok) | ||||
| 	assert.Equal(t, "", section) | ||||
| 	assert.Equal(t, "", key) | ||||
| 	assert.False(t, file) | ||||
|  | ||||
| 	ok, section, key, file = decodeEnvironmentKey(prefix, suffix, "GITEA__SEC") | ||||
| 	assert.False(t, ok) | ||||
| 	assert.Equal(t, "", section) | ||||
| 	assert.Equal(t, "", key) | ||||
| 	assert.False(t, file) | ||||
|  | ||||
| 	ok, section, key, file = decodeEnvironmentKey(prefix, suffix, "GITEA__SEC__KEY") | ||||
| 	assert.True(t, ok) | ||||
| 	assert.Equal(t, "sec", section) | ||||
| 	assert.Equal(t, "KEY", key) | ||||
| 	assert.False(t, file) | ||||
|  | ||||
| 	// with "__FILE" suffix, it doesn't support to write "[sec].FILE" to config (no such key FILE is used in Gitea) | ||||
| 	// but it could be fixed in the future by adding a new suffix like "__VALUE" (no such key VALUE is used in Gitea either) | ||||
| 	ok, section, key, file = decodeEnvironmentKey(prefix, suffix, "GITEA__SEC__FILE") | ||||
| 	assert.False(t, ok) | ||||
| 	assert.Equal(t, "", section) | ||||
| 	assert.Equal(t, "", key) | ||||
| 	assert.True(t, file) | ||||
|  | ||||
| 	ok, section, key, file = decodeEnvironmentKey(prefix, suffix, "GITEA__SEC__KEY__FILE") | ||||
| 	assert.True(t, ok) | ||||
| 	assert.Equal(t, "sec", section) | ||||
| 	assert.Equal(t, "KEY", key) | ||||
| 	assert.True(t, file) | ||||
| } | ||||
|  | ||||
| func TestEnvironmentToConfig(t *testing.T) { | ||||
| 	cfg := ini.Empty() | ||||
|  | ||||
| 	changed := EnvironmentToConfig(cfg, "GITEA__", "__FILE", nil) | ||||
| 	assert.False(t, changed) | ||||
|  | ||||
| 	cfg, err := ini.Load([]byte(` | ||||
| [sec] | ||||
| key = old | ||||
| `)) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| 	changed = EnvironmentToConfig(cfg, "GITEA__", "__FILE", []string{"GITEA__sec__key=new"}) | ||||
| 	assert.True(t, changed) | ||||
| 	assert.Equal(t, "new", cfg.Section("sec").Key("key").String()) | ||||
|  | ||||
| 	changed = EnvironmentToConfig(cfg, "GITEA__", "__FILE", []string{"GITEA__sec__key=new"}) | ||||
| 	assert.False(t, changed) | ||||
|  | ||||
| 	tmpFile := t.TempDir() + "/the-file" | ||||
| 	_ = os.WriteFile(tmpFile, []byte("value-from-file"), 0o644) | ||||
| 	changed = EnvironmentToConfig(cfg, "GITEA__", "__FILE", []string{"GITEA__sec__key__FILE=" + tmpFile}) | ||||
| 	assert.True(t, changed) | ||||
| 	assert.Equal(t, "value-from-file", cfg.Section("sec").Key("key").String()) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user