hotfix(storage): do not write filepath field for non-manifest files

This commit is contained in:
Quentin McGaw
2026-05-19 03:03:30 +00:00
parent 7720b1fad4
commit b119325241
2 changed files with 68 additions and 1 deletions
+4 -1
View File
@@ -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)
+64
View File
@@ -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)
}