@@ -15,13 +15,100 @@ import (
15
15
"github.com/stretchr/testify/require"
16
16
)
17
17
18
+ var supportedFileTypes = []base.FileType {
19
+ base .FileTypeTable ,
20
+ base .FileTypeBlob ,
21
+ }
22
+
18
23
func TestSharedObjectBacking (t * testing.T ) {
19
24
for _ , cleanup := range []objstorage.SharedCleanupMethod {objstorage .SharedRefTracking , objstorage .SharedNoCleanup } {
20
25
name := "ref-tracking"
21
26
if cleanup == objstorage .SharedNoCleanup {
22
27
name = "no-cleanup"
23
28
}
24
- t .Run (name , func (t * testing.T ) {
29
+ for _ , fileType := range supportedFileTypes {
30
+ t .Run (fileType .String (), func (t * testing.T ) {
31
+ t .Run (name , func (t * testing.T ) {
32
+ st := DefaultSettings (vfs .NewMem (), "" )
33
+ sharedStorage := remote .NewInMem ()
34
+ st .Remote .StorageFactory = remote .MakeSimpleFactory (map [remote.Locator ]remote.Storage {
35
+ "foo" : sharedStorage ,
36
+ })
37
+ p , err := Open (st )
38
+ require .NoError (t , err )
39
+ defer p .Close ()
40
+
41
+ const creatorID = objstorage .CreatorID (99 )
42
+ require .NoError (t , p .SetCreatorID (creatorID ))
43
+ meta := objstorage.ObjectMetadata {
44
+ DiskFileNum : base .DiskFileNum (1 ),
45
+ FileType : fileType ,
46
+ }
47
+ meta .Remote .CreatorID = 100
48
+ meta .Remote .CreatorFileNum = base .DiskFileNum (200 )
49
+ meta .Remote .CleanupMethod = cleanup
50
+ meta .Remote .Locator = "foo"
51
+ meta .Remote .CustomObjectName = "obj-name"
52
+ meta .Remote .Storage = sharedStorage
53
+
54
+ h , err := p .RemoteObjectBacking (& meta )
55
+ require .NoError (t , err )
56
+ buf , err := h .Get ()
57
+ require .NoError (t , err )
58
+ h .Close ()
59
+ _ , err = h .Get ()
60
+ require .Error (t , err )
61
+
62
+ d1 , err := decodeRemoteObjectBacking (fileType , base .DiskFileNum (100 ), buf )
63
+ require .NoError (t , err )
64
+ require .Equal (t , uint64 (100 ), uint64 (d1 .meta .DiskFileNum ))
65
+ require .Equal (t , fileType , d1 .meta .FileType )
66
+ d1 .meta .Remote .Storage = sharedStorage
67
+ require .Equal (t , meta .Remote , d1 .meta .Remote )
68
+ if cleanup == objstorage .SharedRefTracking {
69
+ require .Equal (t , creatorID , d1 .refToCheck .creatorID )
70
+ require .Equal (t , base .DiskFileNum (1 ), d1 .refToCheck .fileNum )
71
+ } else {
72
+ require .Equal (t , objstorage .CreatorID (0 ), d1 .refToCheck .creatorID )
73
+ require .Equal (t , base .DiskFileNum (0 ), d1 .refToCheck .fileNum )
74
+ }
75
+
76
+ t .Run ("unknown-tags" , func (t * testing.T ) {
77
+ // Append a tag that is safe to ignore.
78
+ buf2 := buf
79
+ buf2 = binary .AppendUvarint (buf2 , 13 )
80
+ buf2 = binary .AppendUvarint (buf2 , 2 )
81
+ buf2 = append (buf2 , 1 , 1 )
82
+
83
+ d2 , err := decodeRemoteObjectBacking (fileType , base .DiskFileNum (100 ), buf2 )
84
+ require .NoError (t , err )
85
+ require .Equal (t , uint64 (100 ), uint64 (d2 .meta .DiskFileNum ))
86
+ require .Equal (t , fileType , d2 .meta .FileType )
87
+ d2 .meta .Remote .Storage = sharedStorage
88
+ require .Equal (t , meta .Remote , d2 .meta .Remote )
89
+ if cleanup == objstorage .SharedRefTracking {
90
+ require .Equal (t , creatorID , d2 .refToCheck .creatorID )
91
+ require .Equal (t , base .DiskFileNum (1 ), d2 .refToCheck .fileNum )
92
+ } else {
93
+ require .Equal (t , objstorage .CreatorID (0 ), d2 .refToCheck .creatorID )
94
+ require .Equal (t , base .DiskFileNum (0 ), d2 .refToCheck .fileNum )
95
+ }
96
+
97
+ buf3 := buf2
98
+ buf3 = binary .AppendUvarint (buf3 , tagNotSafeToIgnoreMask + 5 )
99
+ _ , err = decodeRemoteObjectBacking (meta .FileType , meta .DiskFileNum , buf3 )
100
+ require .Error (t , err )
101
+ require .Contains (t , err .Error (), "unknown tag" )
102
+ })
103
+ })
104
+ })
105
+ }
106
+ }
107
+ }
108
+
109
+ func TestCreateSharedObjectBacking (t * testing.T ) {
110
+ for _ , fileType := range supportedFileTypes {
111
+ t .Run (fileType .String (), func (t * testing.T ) {
25
112
st := DefaultSettings (vfs .NewMem (), "" )
26
113
sharedStorage := remote .NewInMem ()
27
114
st .Remote .StorageFactory = remote .MakeSimpleFactory (map [remote.Locator ]remote.Storage {
@@ -31,128 +118,58 @@ func TestSharedObjectBacking(t *testing.T) {
31
118
require .NoError (t , err )
32
119
defer p .Close ()
33
120
34
- const creatorID = objstorage .CreatorID (99 )
35
- require .NoError (t , p .SetCreatorID (creatorID ))
36
- meta := objstorage.ObjectMetadata {
37
- DiskFileNum : base .DiskFileNum (1 ),
38
- FileType : base .FileTypeTable ,
39
- }
40
- meta .Remote .CreatorID = 100
41
- meta .Remote .CreatorFileNum = base .DiskFileNum (200 )
42
- meta .Remote .CleanupMethod = cleanup
43
- meta .Remote .Locator = "foo"
44
- meta .Remote .CustomObjectName = "obj-name"
45
- meta .Remote .Storage = sharedStorage
46
-
47
- h , err := p .RemoteObjectBacking (& meta )
48
- require .NoError (t , err )
49
- buf , err := h .Get ()
50
- require .NoError (t , err )
51
- h .Close ()
52
- _ , err = h .Get ()
53
- require .Error (t , err )
121
+ require .NoError (t , p .SetCreatorID (1 ))
54
122
55
- d1 , err := decodeRemoteObjectBacking ( base . FileTypeTable , base . DiskFileNum ( 100 ), buf )
123
+ backing , err := p . CreateExternalObjectBacking ( "foo" , "custom-obj-name" )
56
124
require .NoError (t , err )
57
- require .Equal (t , uint64 (100 ), uint64 (d1 .meta .DiskFileNum ))
58
- require .Equal (t , base .FileTypeTable , d1 .meta .FileType )
59
- d1 .meta .Remote .Storage = sharedStorage
60
- require .Equal (t , meta .Remote , d1 .meta .Remote )
61
- if cleanup == objstorage .SharedRefTracking {
62
- require .Equal (t , creatorID , d1 .refToCheck .creatorID )
63
- require .Equal (t , base .DiskFileNum (1 ), d1 .refToCheck .fileNum )
64
- } else {
65
- require .Equal (t , objstorage .CreatorID (0 ), d1 .refToCheck .creatorID )
66
- require .Equal (t , base .DiskFileNum (0 ), d1 .refToCheck .fileNum )
67
- }
68
-
69
- t .Run ("unknown-tags" , func (t * testing.T ) {
70
- // Append a tag that is safe to ignore.
71
- buf2 := buf
72
- buf2 = binary .AppendUvarint (buf2 , 13 )
73
- buf2 = binary .AppendUvarint (buf2 , 2 )
74
- buf2 = append (buf2 , 1 , 1 )
75
-
76
- d2 , err := decodeRemoteObjectBacking (base .FileTypeTable , base .DiskFileNum (100 ), buf2 )
77
- require .NoError (t , err )
78
- require .Equal (t , uint64 (100 ), uint64 (d2 .meta .DiskFileNum ))
79
- require .Equal (t , base .FileTypeTable , d2 .meta .FileType )
80
- d2 .meta .Remote .Storage = sharedStorage
81
- require .Equal (t , meta .Remote , d2 .meta .Remote )
82
- if cleanup == objstorage .SharedRefTracking {
83
- require .Equal (t , creatorID , d2 .refToCheck .creatorID )
84
- require .Equal (t , base .DiskFileNum (1 ), d2 .refToCheck .fileNum )
85
- } else {
86
- require .Equal (t , objstorage .CreatorID (0 ), d2 .refToCheck .creatorID )
87
- require .Equal (t , base .DiskFileNum (0 ), d2 .refToCheck .fileNum )
88
- }
89
-
90
- buf3 := buf2
91
- buf3 = binary .AppendUvarint (buf3 , tagNotSafeToIgnoreMask + 5 )
92
- _ , err = decodeRemoteObjectBacking (meta .FileType , meta .DiskFileNum , buf3 )
93
- require .Error (t , err )
94
- require .Contains (t , err .Error (), "unknown tag" )
95
- })
125
+ d , err := decodeRemoteObjectBacking (fileType , base .DiskFileNum (100 ), backing )
126
+ require .NoError (t , err )
127
+ require .Equal (t , uint64 (100 ), uint64 (d .meta .DiskFileNum ))
128
+ require .Equal (t , fileType , d .meta .FileType )
129
+ require .Equal (t , remote .Locator ("foo" ), d .meta .Remote .Locator )
130
+ require .Equal (t , "custom-obj-name" , d .meta .Remote .CustomObjectName )
131
+ require .Equal (t , objstorage .SharedNoCleanup , d .meta .Remote .CleanupMethod )
96
132
})
97
133
}
98
134
}
99
135
100
- func TestCreateSharedObjectBacking (t * testing.T ) {
101
- st := DefaultSettings (vfs .NewMem (), "" )
102
- sharedStorage := remote .NewInMem ()
103
- st .Remote .StorageFactory = remote .MakeSimpleFactory (map [remote.Locator ]remote.Storage {
104
- "foo" : sharedStorage ,
105
- })
106
- p , err := Open (st )
107
- require .NoError (t , err )
108
- defer p .Close ()
109
-
110
- require .NoError (t , p .SetCreatorID (1 ))
111
-
112
- backing , err := p .CreateExternalObjectBacking ("foo" , "custom-obj-name" )
113
- require .NoError (t , err )
114
- d , err := decodeRemoteObjectBacking (base .FileTypeTable , base .DiskFileNum (100 ), backing )
115
- require .NoError (t , err )
116
- require .Equal (t , uint64 (100 ), uint64 (d .meta .DiskFileNum ))
117
- require .Equal (t , base .FileTypeTable , d .meta .FileType )
118
- require .Equal (t , remote .Locator ("foo" ), d .meta .Remote .Locator )
119
- require .Equal (t , "custom-obj-name" , d .meta .Remote .CustomObjectName )
120
- require .Equal (t , objstorage .SharedNoCleanup , d .meta .Remote .CleanupMethod )
121
- }
122
-
123
136
func TestAttachRemoteObjects (t * testing.T ) {
124
- st := DefaultSettings (vfs .NewMem (), "" )
125
- sharedStorage := remote .NewInMem ()
126
- st .Remote .StorageFactory = remote .MakeSimpleFactory (map [remote.Locator ]remote.Storage {
127
- "foo" : sharedStorage ,
128
- })
129
- p , err := Open (st )
130
- require .NoError (t , err )
131
- defer p .Close ()
132
- require .NoError (t , p .SetCreatorID (1 ))
133
- backing , err := p .CreateExternalObjectBacking ("foo" , "custom-obj-name" )
134
- require .NoError (t , err )
135
- _ , err = p .AttachRemoteObjects ([]objstorage.RemoteObjectToAttach {{
136
- FileType : base .FileTypeTable ,
137
- FileNum : 100 ,
138
- Backing : backing ,
139
- }})
140
- require .NoError (t , err )
141
-
142
- // Sync, close, and reopen the provider and expect that we see
143
- // our object.
144
- require .NoError (t , p .Sync ())
145
- require .NoError (t , p .Close ())
146
-
147
- p , err = Open (st )
148
- require .NoError (t , err )
149
- defer p .Close ()
150
- require .NoError (t , p .SetCreatorID (1 ))
151
- objs := p .List ()
152
- require .Len (t , objs , 1 )
153
- o := objs [0 ]
154
- require .Equal (t , remote .Locator ("foo" ), o .Remote .Locator )
155
- require .Equal (t , "custom-obj-name" , o .Remote .CustomObjectName )
156
- require .Equal (t , uint64 (100 ), uint64 (o .DiskFileNum ))
157
- require .Equal (t , base .FileTypeTable , o .FileType )
137
+ for _ , fileType := range supportedFileTypes {
138
+ t .Run (fileType .String (), func (t * testing.T ) {
139
+ st := DefaultSettings (vfs .NewMem (), "" )
140
+ sharedStorage := remote .NewInMem ()
141
+ st .Remote .StorageFactory = remote .MakeSimpleFactory (map [remote.Locator ]remote.Storage {
142
+ "foo" : sharedStorage ,
143
+ })
144
+ p , err := Open (st )
145
+ require .NoError (t , err )
146
+ defer p .Close ()
147
+ require .NoError (t , p .SetCreatorID (1 ))
148
+ backing , err := p .CreateExternalObjectBacking ("foo" , "custom-obj-name" )
149
+ require .NoError (t , err )
150
+ _ , err = p .AttachRemoteObjects ([]objstorage.RemoteObjectToAttach {{
151
+ FileType : fileType ,
152
+ FileNum : 100 ,
153
+ Backing : backing ,
154
+ }})
155
+ require .NoError (t , err )
156
+
157
+ // Sync, close, and reopen the provider and expect that we see
158
+ // our object.
159
+ require .NoError (t , p .Sync ())
160
+ require .NoError (t , p .Close ())
161
+
162
+ p , err = Open (st )
163
+ require .NoError (t , err )
164
+ defer p .Close ()
165
+ require .NoError (t , p .SetCreatorID (1 ))
166
+ objs := p .List ()
167
+ require .Len (t , objs , 1 )
168
+ o := objs [0 ]
169
+ require .Equal (t , remote .Locator ("foo" ), o .Remote .Locator )
170
+ require .Equal (t , "custom-obj-name" , o .Remote .CustomObjectName )
171
+ require .Equal (t , uint64 (100 ), uint64 (o .DiskFileNum ))
172
+ require .Equal (t , fileType , o .FileType )
173
+ })
174
+ }
158
175
}
0 commit comments