TestUploadFileLargeModuleFiles tests the UploadFile RPC with large module files
(t *testing.T)
| 21 | |
| 22 | // TestUploadFileLargeModuleFiles tests the UploadFile RPC with large module files |
| 23 | func 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 | } |
nothing calls this directly
no test coverage detected