Welcome to mirror list, hosted at ThFree Co, Russian Federation.

datastore_memory_test.go « praefect « internal - gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a618d946644b9e3fa2833a9270e85ce888978eee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package praefect

import (
	"testing"

	"github.com/stretchr/testify/require"
	"gitlab.com/gitlab-org/gitaly/internal/praefect/config"
	"gitlab.com/gitlab-org/gitaly/internal/praefect/models"
)

// TestMemoryDatastoreWhitelist verifies that the in-memory datastore will
// populate itself with the correct replication jobs and repositories when initialized
// with a configuration file specifying the shard and whitelisted repositories.
func TestMemoryDatastoreWhitelist(t *testing.T) {
	repo1 := models.Repository{
		RelativePath: "abcd1234",
	}
	repo2 := models.Repository{
		RelativePath: "5678efgh",
	}
	mds := NewMemoryDatastore(config.Config{
		StorageNodes: []*models.StorageNode{
			&models.StorageNode{
				ID:      0,
				Address: "tcp://default",
				Storage: "praefect-internal-1",
			},
			&models.StorageNode{
				ID:      1,
				Address: "tcp://backup-2",
				Storage: "praefect-internal-2",
			}, &models.StorageNode{
				ID:      2,
				Address: "tcp://backup-2",
				Storage: "praefect-internal-3",
			}},
		Whitelist: []string{repo1.RelativePath, repo2.RelativePath},
	})

	expectReplicas := []models.StorageNode{
		mds.storageNodes.m[1],
		mds.storageNodes.m[2],
	}

	for _, repo := range []models.Repository{repo1, repo2} {
		actualReplicas, err := mds.GetReplicas(repo.RelativePath)
		require.NoError(t, err)
		require.ElementsMatch(t, expectReplicas, actualReplicas)
	}

	backup1 := mds.storageNodes.m[1]
	backup2 := mds.storageNodes.m[2]

	backup1ExpectedJobs := []ReplJob{
		ReplJob{
			ID:            1,
			TargetNodeID:  backup1.ID,
			Source:        models.Repository{RelativePath: repo1.RelativePath},
			SourceStorage: "praefect-internal-1",
			State:         JobStateReady,
		},
		ReplJob{
			ID:            3,
			TargetNodeID:  backup1.ID,
			Source:        models.Repository{RelativePath: repo2.RelativePath},
			SourceStorage: "praefect-internal-1",
			State:         JobStateReady,
		},
	}
	backup2ExpectedJobs := []ReplJob{
		ReplJob{
			ID:            2,
			TargetNodeID:  backup2.ID,
			Source:        models.Repository{RelativePath: repo1.RelativePath},
			SourceStorage: "praefect-internal-1",
			State:         JobStateReady,
		},
		ReplJob{
			ID:            4,
			TargetNodeID:  backup2.ID,
			Source:        models.Repository{RelativePath: repo2.RelativePath},
			SourceStorage: "praefect-internal-1",
			State:         JobStateReady,
		},
	}

	backup1ActualJobs, err := mds.GetJobs(JobStatePending|JobStateReady, backup1.ID, 10)
	require.NoError(t, err)
	require.Equal(t, backup1ExpectedJobs, backup1ActualJobs)

	backup2ActualJobs, err := mds.GetJobs(JobStatePending|JobStateReady, backup2.ID, 10)
	require.NoError(t, err)
	require.Equal(t, backup2ActualJobs, backup2ExpectedJobs)

}