| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | 
							- // 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 db
 
- import (
 
- 	"bytes"
 
- 	"os"
 
- 	"path/filepath"
 
- 	"testing"
 
- 	"time"
 
- 	"github.com/pkg/errors"
 
- 	"gorm.io/gorm"
 
- 	"gogs.io/gogs/internal/auth"
 
- 	"gogs.io/gogs/internal/auth/github"
 
- 	"gogs.io/gogs/internal/auth/pam"
 
- 	"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) != 4 {
 
- 		t.Fatalf("New table has added (want 4 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{}{
 
- 		&Access{
 
- 			ID:     1,
 
- 			UserID: 1,
 
- 			RepoID: 11,
 
- 			Mode:   AccessModeRead,
 
- 		},
 
- 		&Access{
 
- 			ID:     2,
 
- 			UserID: 2,
 
- 			RepoID: 22,
 
- 			Mode:   AccessModeWrite,
 
- 		},
 
- 		&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:      auth.PAM,
 
- 			Name:      "My PAM",
 
- 			IsActived: true,
 
- 			Provider: pam.NewProvider(&pam.Config{
 
- 				ServiceName: "PAM service",
 
- 			}),
 
- 			CreatedUnix: 1588568886,
 
- 			UpdatedUnix: 1588572486, // 1 hour later
 
- 		},
 
- 		&LoginSource{
 
- 			Type:      auth.GitHub,
 
- 			Name:      "GitHub.com",
 
- 			IsActived: true,
 
- 			Provider: github.NewProvider(&github.Config{
 
- 				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)
 
- 		}
 
- 	}
 
- }
 
 
  |