MCPcopy Index your code
hub / github.com/coder/coder / TestUploadFileLargeModuleFiles

Function TestUploadFileLargeModuleFiles

coderd/provisionerdserver/upload_file_test.go:23–81  ·  view source on GitHub ↗

TestUploadFileLargeModuleFiles tests the UploadFile RPC with large module files

(t *testing.T)

Source from the content-addressed store, hash-verified

21
22// TestUploadFileLargeModuleFiles tests the UploadFile RPC with large module files
23func TestUploadFileLargeModuleFiles(t *testing.T) {
24 t.Parallel()
25
26 // Create server
27 server, db, _, _ := setup(t, false, &overrides{
28 externalAuthConfigs: []*externalauth.Config{{}},
29 })
30
31 testSizes := []int{
32 0, // Empty file
33 512, // A small file
34 drpcsdk.MaxMessageSize + 1024, // Just over the limit
35 drpcsdk.MaxMessageSize * 2, // 2x the limit
36 sdkproto.ChunkSize*3 + 512, // Multiple chunks with partial last
37 }
38
39 for _, size := range testSizes {
40 t.Run(fmt.Sprintf("size_%d_bytes", size), func(t *testing.T) {
41 t.Parallel()
42
43 ctx := testutil.Context(t, testutil.WaitMedium)
44
45 // Generate test module files data
46 moduleData := make([]byte, size)
47 _, err := crand.Read(moduleData)
48 require.NoError(t, err)
49
50 // Convert to upload format
51 upload, chunks, err := sdkproto.BytesToDataUpload(sdkproto.DataUploadType_UPLOAD_TYPE_MODULE_FILES, moduleData)
52 require.NoError(t, err)
53
54 stream := newMockUploadStream(upload, chunks...)
55
56 // Execute upload
57 err = server.UploadFile(stream)
58 require.NoError(t, err)
59
60 // Upload should be done
61 require.True(t, stream.isDone(), "stream should be done after upload")
62
63 // Verify file was stored in database
64 hashString := fmt.Sprintf("%x", upload.DataHash)
65 file, err := db.GetFileByHashAndCreator(ctx, database.GetFileByHashAndCreatorParams{
66 Hash: hashString,
67 CreatedBy: uuid.Nil, // Provisionerd creates with Nil UUID
68 })
69 require.NoError(t, err)
70 require.Equal(t, hashString, file.Hash)
71 require.Equal(t, moduleData, file.Data)
72 require.Equal(t, "application/x-tar", file.Mimetype)
73
74 // Try to upload it again, and it should still be successful
75 stream = newMockUploadStream(upload, chunks...)
76 err = server.UploadFile(stream)
77 require.NoError(t, err, "re-upload should succeed without error")
78 require.True(t, stream.isDone(), "stream should be done after re-upload")
79 })
80 }

Callers

nothing calls this directly

Calls 9

ContextFunction · 0.92
newMockUploadStreamFunction · 0.85
isDoneMethod · 0.80
setupFunction · 0.70
RunMethod · 0.65
ReadMethod · 0.65
UploadFileMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected