| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | // Copyright 2020 The Gogs Authors. All rights reserved.// Use of this source code is governed by a MIT-style// license that can be found in the LICENSE file.package dbimport (	"bytes"	"os"	"path/filepath"	"testing"	"time"	"github.com/jinzhu/gorm"	"github.com/pkg/errors"	"gogs.io/gogs/internal/cryptoutil"	"gogs.io/gogs/internal/lfsutil"	"gogs.io/gogs/internal/testutil")func Test_dumpAndImport(t *testing.T) {	if testing.Short() {		t.Skip()	}	t.Parallel()	if len(tables) != 3 {		t.Fatalf("New table has added (want 3 got %d), please add new tests for the table and update this check", len(tables))	}	db := initTestDB(t, "dumpAndImport", tables...)	setupDBToDump(t, db)	dumpTables(t, db)	importTables(t, db)	// Dump and assert golden again to make sure data aren't changed.	dumpTables(t, db)}func setupDBToDump(t *testing.T, db *gorm.DB) {	t.Helper()	vals := []interface{}{		&AccessToken{			UserID:      1,			Name:        "test1",			Sha1:        cryptoutil.SHA1("2910d03d-c0b5-4f71-bad5-c4086e4efae3"),			CreatedUnix: 1588568886,			UpdatedUnix: 1588572486, // 1 hour later		},		&AccessToken{			UserID:      1,			Name:        "test2",			Sha1:        cryptoutil.SHA1("84117e17-7e67-4024-bd04-1c23e6e809d4"),			CreatedUnix: 1588568886,		},		&AccessToken{			UserID:      2,			Name:        "test1",			Sha1:        cryptoutil.SHA1("da2775ce-73dd-47ba-b9d2-bbcc346585c4"),			CreatedUnix: 1588568886,		},		&LFSObject{			RepoID:    1,			OID:       "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",			Size:      100,			Storage:   lfsutil.StorageLocal,			CreatedAt: time.Unix(1588568886, 0).UTC(),		},		&LFSObject{			RepoID:    2,			OID:       "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",			Size:      100,			Storage:   lfsutil.StorageLocal,			CreatedAt: time.Unix(1588568886, 0).UTC(),		},		&LoginSource{			Type:      LoginPAM,			Name:      "My PAM",			IsActived: true,			Config: &PAMConfig{				ServiceName: "PAM service",			},			CreatedUnix: 1588568886,			UpdatedUnix: 1588572486, // 1 hour later		},		&LoginSource{			Type:      LoginGitHub,			Name:      "GitHub.com",			IsActived: true,			Config: &GitHubConfig{				APIEndpoint: "https://api.github.com",			},			CreatedUnix: 1588568886,		},	}	for _, val := range vals {		err := db.Create(val).Error		if err != nil {			t.Fatal(err)		}	}}func dumpTables(t *testing.T, db *gorm.DB) {	t.Helper()	for _, table := range tables {		tableName := getTableType(table)		var buf bytes.Buffer		err := dumpTable(db, table, &buf)		if err != nil {			t.Fatalf("%s: %v", tableName, err)		}		golden := filepath.Join("testdata", "backup", tableName+".golden.json")		testutil.AssertGolden(t, golden, testutil.Update("Test_dumpAndImport"), buf.String())	}}func importTables(t *testing.T, db *gorm.DB) {	t.Helper()	for _, table := range tables {		tableName := getTableType(table)		err := func() error {			golden := filepath.Join("testdata", "backup", tableName+".golden.json")			f, err := os.Open(golden)			if err != nil {				return errors.Wrap(err, "open table file")			}			defer func() { _ = f.Close() }()			return importTable(db, table, f)		}()		if err != nil {			t.Fatalf("%s: %v", tableName, err)		}	}}
 |