123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package backup
- import (
- "os"
- "path/filepath"
- "strings"
- "testing"
- "github.com/0xJacky/Nginx-UI/internal/version"
- "github.com/0xJacky/Nginx-UI/settings"
- "github.com/stretchr/testify/assert"
- cosysettings "github.com/uozi-tech/cosy/settings"
- )
- // TestBackupVersion verifies that the backup file contains correct version information
- func TestBackupVersion(t *testing.T) {
- // Make sure backup files are cleaned up at the start and end of the test
- cleanupBackupFiles()
- defer cleanupBackupFiles()
- // Create test configuration
- tempDir, err := os.MkdirTemp("", "nginx-ui-backup-version-test-*")
- assert.NoError(t, err)
- defer os.RemoveAll(tempDir)
- // Create config file
- configPath := filepath.Join(tempDir, "config.ini")
- testConfig := []byte("[app]\nName = Nginx UI Test\n")
- err = os.WriteFile(configPath, testConfig, 0644)
- assert.NoError(t, err)
- // Create database file
- dbName := settings.DatabaseSettings.GetName()
- dbFile := dbName + ".db"
- dbPath := filepath.Join(tempDir, dbFile)
- testDB := []byte("CREATE TABLE users (id INT, name TEXT);")
- err = os.WriteFile(dbPath, testDB, 0644)
- assert.NoError(t, err)
- // Create nginx directory
- nginxConfigDir := filepath.Join(tempDir, "nginx")
- err = os.MkdirAll(nginxConfigDir, 0755)
- assert.NoError(t, err)
- // Create nginx config
- testNginxContent := []byte("server {\n listen 80;\n server_name example.com;\n}\n")
- err = os.WriteFile(filepath.Join(nginxConfigDir, "nginx.conf"), testNginxContent, 0644)
- assert.NoError(t, err)
- // Setup test environment
- originalConfPath := cosysettings.ConfPath
- originalNginxConfigDir := settings.NginxSettings.ConfigDir
- cosysettings.ConfPath = configPath
- settings.NginxSettings.ConfigDir = nginxConfigDir
- // Restore original settings after test
- defer func() {
- cosysettings.ConfPath = originalConfPath
- settings.NginxSettings.ConfigDir = originalNginxConfigDir
- }()
- // Run backup
- result, err := Backup()
- assert.NoError(t, err)
- assert.NotEmpty(t, result.BackupContent)
- assert.NotEmpty(t, result.BackupName)
- assert.NotEmpty(t, result.AESKey)
- assert.NotEmpty(t, result.AESIv)
- // Save backup content to temporary file for restore testing
- backupFile := filepath.Join(tempDir, result.BackupName)
- err = os.WriteFile(backupFile, result.BackupContent, 0644)
- assert.NoError(t, err)
- // Decode AES key and IV
- key, err := DecodeFromBase64(result.AESKey)
- assert.NoError(t, err)
- iv, err := DecodeFromBase64(result.AESIv)
- assert.NoError(t, err)
- // Use the Restore function to extract and verify
- restoreDir, err := os.MkdirTemp("", "nginx-ui-restore-version-test-*")
- assert.NoError(t, err)
- defer os.RemoveAll(restoreDir)
- restoreResult, err := Restore(RestoreOptions{
- BackupPath: backupFile,
- AESKey: key,
- AESIv: iv,
- RestoreDir: restoreDir,
- VerifyHash: true,
- RestoreNginx: false,
- RestoreNginxUI: false,
- })
- assert.NoError(t, err)
- assert.True(t, restoreResult.HashMatch, "Hash should match")
- // Check hash_info.txt file
- hashInfoPath := filepath.Join(restoreDir, HashInfoFile)
- hashInfoContent, err := os.ReadFile(hashInfoPath)
- assert.NoError(t, err)
- // Verify version information
- versionInfo := version.GetVersionInfo()
- expectedVersion := versionInfo.Version
- // Check if hash_info.txt contains version info
- hashInfoStr := string(hashInfoContent)
- t.Logf("Hash info content: %s", hashInfoStr)
- assert.True(t, strings.Contains(hashInfoStr, "version: "), "Hash info should contain version field")
- // Parse hash_info.txt content
- info := parseHashInfo(hashInfoStr)
- assert.Equal(t, expectedVersion, info.Version, "Backup version should match current version")
- }
|