| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | package backupimport (	"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 informationfunc 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")}
 |