1+ // Copyright (c) Microsoft Corporation. All rights reserved.
2+ // Licensed under the MIT License.
3+
4+ package com .azure .storage .common .implementation .contentvalidation ;
5+
6+ import com .azure .storage .blob .options .BlobDownloadToFileOptions ;
7+ import com .azure .storage .blob .options .BlobInputStreamOptions ;
8+ import com .azure .storage .blob .options .BlobSeekableByteChannelReadOptions ;
9+ import com .azure .storage .file .datalake .options .ReadToFileOptions ;
10+ import com .azure .storage .file .share .options .ShareFileDownloadOptions ;
11+ import org .junit .jupiter .api .Test ;
12+
13+ import static org .junit .jupiter .api .Assertions .*;
14+
15+ /**
16+ * Integration tests for structured message content validation across all storage services.
17+ */
18+ public class ContentValidationIntegrationTests {
19+
20+ @ Test
21+ public void testDownloadContentValidationOptionsAcrossServices () {
22+ // Create validation options
23+ DownloadContentValidationOptions validationOptions = new DownloadContentValidationOptions ()
24+ .setStructuredMessageValidationEnabled (true )
25+ .setMd5ValidationEnabled (false );
26+
27+ // Test Blob Storage integration
28+ testBlobStorageIntegration (validationOptions );
29+
30+ // Test Data Lake integration
31+ testDataLakeIntegration (validationOptions );
32+
33+ // Test File Share integration
34+ testFileShareIntegration (validationOptions );
35+ }
36+
37+ private void testBlobStorageIntegration (DownloadContentValidationOptions validationOptions ) {
38+ // Test BlobDownloadToFileOptions
39+ BlobDownloadToFileOptions blobDownloadOptions = new BlobDownloadToFileOptions ("/tmp/test.txt" )
40+ .setContentValidationOptions (validationOptions );
41+
42+ assertNotNull (blobDownloadOptions .getContentValidationOptions ());
43+ assertTrue (blobDownloadOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
44+ assertFalse (blobDownloadOptions .getContentValidationOptions ().isMd5ValidationEnabled ());
45+
46+ // Test BlobInputStreamOptions
47+ BlobInputStreamOptions inputStreamOptions = new BlobInputStreamOptions ()
48+ .setContentValidationOptions (validationOptions );
49+
50+ assertNotNull (inputStreamOptions .getContentValidationOptions ());
51+ assertTrue (inputStreamOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
52+
53+ // Test BlobSeekableByteChannelReadOptions
54+ BlobSeekableByteChannelReadOptions seekableOptions = new BlobSeekableByteChannelReadOptions ()
55+ .setContentValidationOptions (validationOptions );
56+
57+ assertNotNull (seekableOptions .getContentValidationOptions ());
58+ assertTrue (seekableOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
59+ }
60+
61+ private void testDataLakeIntegration (DownloadContentValidationOptions validationOptions ) {
62+ // Test ReadToFileOptions for Data Lake
63+ ReadToFileOptions dataLakeOptions = new ReadToFileOptions ("/tmp/datalake-test.txt" )
64+ .setContentValidationOptions (validationOptions );
65+
66+ assertNotNull (dataLakeOptions .getContentValidationOptions ());
67+ assertTrue (dataLakeOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
68+ assertFalse (dataLakeOptions .getContentValidationOptions ().isMd5ValidationEnabled ());
69+ }
70+
71+ private void testFileShareIntegration (DownloadContentValidationOptions validationOptions ) {
72+ // Test ShareFileDownloadOptions
73+ ShareFileDownloadOptions shareOptions = new ShareFileDownloadOptions ()
74+ .setContentValidationOptions (validationOptions );
75+
76+ assertNotNull (shareOptions .getContentValidationOptions ());
77+ assertTrue (shareOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
78+ assertFalse (shareOptions .getContentValidationOptions ().isMd5ValidationEnabled ());
79+ }
80+
81+ @ Test
82+ public void testMixedValidationOptions () {
83+ // Test mixed validation options across services
84+ DownloadContentValidationOptions mixedOptions = new DownloadContentValidationOptions ()
85+ .setStructuredMessageValidationEnabled (true )
86+ .setMd5ValidationEnabled (true );
87+
88+ // Blob Storage with mixed options
89+ BlobDownloadToFileOptions blobOptions = new BlobDownloadToFileOptions ("/tmp/mixed-test.txt" )
90+ .setContentValidationOptions (mixedOptions );
91+
92+ assertTrue (blobOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
93+ assertTrue (blobOptions .getContentValidationOptions ().isMd5ValidationEnabled ());
94+
95+ // Data Lake with mixed options
96+ ReadToFileOptions dataLakeOptions = new ReadToFileOptions ("/tmp/mixed-datalake.txt" )
97+ .setContentValidationOptions (mixedOptions );
98+
99+ assertTrue (dataLakeOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
100+ assertTrue (dataLakeOptions .getContentValidationOptions ().isMd5ValidationEnabled ());
101+
102+ // File Share with mixed options
103+ ShareFileDownloadOptions shareOptions = new ShareFileDownloadOptions ()
104+ .setContentValidationOptions (mixedOptions );
105+
106+ assertTrue (shareOptions .getContentValidationOptions ().isStructuredMessageValidationEnabled ());
107+ assertTrue (shareOptions .getContentValidationOptions ().isMd5ValidationEnabled ());
108+ }
109+
110+ @ Test
111+ public void testFluentInterfaceConsistency () {
112+ // Test that all options classes follow consistent fluent interface patterns
113+ DownloadContentValidationOptions validationOptions = new DownloadContentValidationOptions ()
114+ .setStructuredMessageValidationEnabled (true );
115+
116+ // All setContentValidationOptions methods should return the same instance (fluent interface)
117+ BlobDownloadToFileOptions blobOptions = new BlobDownloadToFileOptions ("/tmp/fluent-test.txt" );
118+ BlobDownloadToFileOptions returnedBlobOptions = blobOptions .setContentValidationOptions (validationOptions );
119+ assertSame (blobOptions , returnedBlobOptions );
120+
121+ BlobInputStreamOptions inputStreamOptions = new BlobInputStreamOptions ();
122+ BlobInputStreamOptions returnedInputStreamOptions = inputStreamOptions .setContentValidationOptions (validationOptions );
123+ assertSame (inputStreamOptions , returnedInputStreamOptions );
124+
125+ BlobSeekableByteChannelReadOptions seekableOptions = new BlobSeekableByteChannelReadOptions ();
126+ BlobSeekableByteChannelReadOptions returnedSeekableOptions = seekableOptions .setContentValidationOptions (validationOptions );
127+ assertSame (seekableOptions , returnedSeekableOptions );
128+
129+ ReadToFileOptions dataLakeOptions = new ReadToFileOptions ("/tmp/fluent-datalake.txt" );
130+ ReadToFileOptions returnedDataLakeOptions = dataLakeOptions .setContentValidationOptions (validationOptions );
131+ assertSame (dataLakeOptions , returnedDataLakeOptions );
132+
133+ ShareFileDownloadOptions shareOptions = new ShareFileDownloadOptions ();
134+ ShareFileDownloadOptions returnedShareOptions = shareOptions .setContentValidationOptions (validationOptions );
135+ assertSame (shareOptions , returnedShareOptions );
136+ }
137+
138+ @ Test
139+ public void testDefaultValues () {
140+ // Test that default values are consistently null across all option classes
141+ assertNull (new BlobDownloadToFileOptions ("/tmp/test.txt" ).getContentValidationOptions ());
142+ assertNull (new BlobInputStreamOptions ().getContentValidationOptions ());
143+ assertNull (new BlobSeekableByteChannelReadOptions ().getContentValidationOptions ());
144+ assertNull (new ReadToFileOptions ("/tmp/test.txt" ).getContentValidationOptions ());
145+ assertNull (new ShareFileDownloadOptions ().getContentValidationOptions ());
146+ }
147+ }
0 commit comments