mirror of
https://github.com/qdm12/gluetun.git
synced 2026-06-10 06:12:27 +02:00
hotfix(storage): do not write filepath field for non-manifest files
This commit is contained in:
@@ -51,9 +51,12 @@ func (s *Storage) flushToFile(manifestPath string) error {
|
||||
return fmt.Errorf("opening servers data file for %s: %w", provider, err)
|
||||
}
|
||||
|
||||
encodedProviderServers := providerServers
|
||||
encodedProviderServers.Filepath = ""
|
||||
|
||||
encoder := json.NewEncoder(providerFile)
|
||||
encoder.SetIndent("", " ")
|
||||
err = encoder.Encode(providerServers)
|
||||
err = encoder.Encode(encodedProviderServers)
|
||||
if err != nil {
|
||||
_ = providerFile.Close()
|
||||
return fmt.Errorf("encoding servers data for %s: %w", provider, err)
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func Test_flushToFile_filepathOnlyInManifest(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tempPath := t.TempDir()
|
||||
providerFilepath := filepath.Join(tempPath, "provider.json")
|
||||
manifestPath := filepath.Join(tempPath, "manifest.json")
|
||||
|
||||
storage := &Storage{
|
||||
mergedServers: models.AllServers{
|
||||
Version: 1,
|
||||
ProviderToServers: map[string]models.Servers{
|
||||
"provider": {
|
||||
Version: 1,
|
||||
Timestamp: 1,
|
||||
Filepath: providerFilepath,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
err := storage.flushToFile(manifestPath)
|
||||
require.NoError(t, err)
|
||||
|
||||
providerFile, err := os.Open(providerFilepath)
|
||||
require.NoError(t, err)
|
||||
defer providerFile.Close()
|
||||
|
||||
providerContent := make(map[string]json.RawMessage)
|
||||
err = json.NewDecoder(providerFile).Decode(&providerContent)
|
||||
require.NoError(t, err)
|
||||
_, hasFilepath := providerContent["filepath"]
|
||||
assert.False(t, hasFilepath)
|
||||
|
||||
manifestFile, err := os.Open(manifestPath)
|
||||
require.NoError(t, err)
|
||||
defer manifestFile.Close()
|
||||
|
||||
manifestContent := make(map[string]json.RawMessage)
|
||||
err = json.NewDecoder(manifestFile).Decode(&manifestContent)
|
||||
require.NoError(t, err)
|
||||
|
||||
providerMetadataRaw, ok := manifestContent["provider"]
|
||||
require.True(t, ok)
|
||||
|
||||
var providerMetadata struct {
|
||||
Filepath string `json:"filepath"`
|
||||
}
|
||||
err = json.Unmarshal(providerMetadataRaw, &providerMetadata)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, providerFilepath, providerMetadata.Filepath)
|
||||
}
|
||||
Reference in New Issue
Block a user