Skip to content

Commit 2e84a59

Browse files
committed
add emulated tests for blobclient and blobcontainerclient
1 parent 07c6a42 commit 2e84a59

File tree

5 files changed

+99
-1
lines changed

5 files changed

+99
-1
lines changed

emulatedtests/Azure.Functions.Java.Tests.E2E/Azure.Functions.Java.Tests.E2E/Constants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public static class Constants
2424
public static string TriggerInputBindingBlobContainer = "test-triggerinput-java-new";
2525
public static string InputBindingBlobContainer = "test-input-java-new";
2626
public static string OutputBindingBlobContainer = "test-output-java-new";
27+
public static string TriggerInputBindingBlobClientSdk = "test-triggerinput-blobclient";
28+
public static string TriggerInputBindingBlobContainerClientSdk = "test-triggerinput-blobcontclient";
2729

2830
// Xunit Fixtures and Collections
2931
public const string FunctionAppCollectionName = "FunctionAppCollection";

emulatedtests/Azure.Functions.Java.Tests.E2E/Azure.Functions.Java.Tests.E2E/Helpers/StorageHelpers.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,17 @@ public async static Task ClearBlobContainers()
8484
await ClearBlobContainer(Constants.TriggerInputBindingBlobContainer);
8585
await ClearBlobContainer(Constants.InputBindingBlobContainer);
8686
await ClearBlobContainer(Constants.OutputBindingBlobContainer);
87+
await ClearBlobContainer(Constants.TriggerInputBindingBlobClientSdk);
88+
await ClearBlobContainer(Constants.TriggerInputBindingBlobContainerClientSdk);
8789
}
8890

8991
public async static Task CreateBlobContainers()
9092
{
9193
await CreateBlobContainer(Constants.TriggerInputBindingBlobContainer);
9294
await CreateBlobContainer(Constants.InputBindingBlobContainer);
9395
await CreateBlobContainer(Constants.OutputBindingBlobContainer);
96+
await CreateBlobContainer(Constants.TriggerInputBindingBlobClientSdk);
97+
await CreateBlobContainer(Constants.TriggerInputBindingBlobContainerClientSdk);
9498
}
9599

96100
public async static Task UpdloadFileToContainer(string containerName, string expectedFileName)

emulatedtests/Azure.Functions.Java.Tests.E2E/Azure.Functions.Java.Tests.E2E/StorageEndToEndTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,43 @@ public async Task BlobTriggerToBlob_Succeeds()
110110

111111
Assert.Equal("Hello World", result);
112112
}
113+
114+
[Fact]
115+
public async Task BlobTriggerToBlob_BlobClient_Succeeds()
116+
{
117+
string fileName = Guid.NewGuid().ToString();
118+
119+
//cleanup
120+
await StorageHelpers.ClearBlobContainers();
121+
122+
//Setup
123+
await StorageHelpers.CreateBlobContainers();
124+
125+
//Trigger
126+
await StorageHelpers.UpdloadFileToContainer(Constants.TriggerInputBindingBlobClientSdk, fileName);
127+
128+
//Verify
129+
string result = await StorageHelpers.DownloadFileFromContainer(Constants.OutputBindingBlobContainer, fileName);
130+
Assert.Equal("Hello World", result);
131+
}
132+
133+
[Fact]
134+
public async Task BlobTriggerToBlob_BlobContainerClient_Succeeds()
135+
{
136+
string fileName = Guid.NewGuid().ToString();
137+
138+
//cleanup
139+
await StorageHelpers.ClearBlobContainers();
140+
141+
//Setup
142+
await StorageHelpers.CreateBlobContainers();
143+
144+
//Trigger
145+
await StorageHelpers.UpdloadFileToContainer(Constants.TriggerInputBindingBlobContainerClientSdk, fileName);
146+
147+
//Verify
148+
string result = await StorageHelpers.DownloadFileFromContainer(Constants.OutputBindingBlobContainer, fileName);
149+
Assert.Equal("Hello World", result);
150+
}
113151
}
114152
}

emulatedtests/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@
112112
<artifactId>spring-cloud-starter-function-web</artifactId>
113113
<scope>provided</scope>
114114
</dependency>
115+
<dependency>
116+
<groupId>com.azure</groupId>
117+
<artifactId>azure-storage-blob</artifactId>
118+
<version>12.29.0</version>
119+
</dependency>
115120
</dependencies>
116121

117122
<dependencyManagement>

emulatedtests/src/main/java/com/microsoft/azure/functions/endtoend/BlobTriggerTests.java

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import com.microsoft.azure.functions.annotation.*;
44

5+
import java.io.ByteArrayOutputStream;
56
import java.util.List;
67
import java.util.Optional;
78

89
import com.microsoft.azure.functions.*;
910

11+
import com.azure.storage.blob.BlobClient;
12+
import com.azure.storage.blob.BlobContainerClient;
13+
1014
/**
1115
* Azure Functions with Azure Storage Blob.
1216
*/
@@ -56,7 +60,52 @@ public void BlobTriggerStringTest(
5660
context.getLogger().info("Java Blob trigger function BlobTriggerStringTest processed a blob.\n Name: " + fileName + "\n Content: " + triggerBlobText);
5761
outputBlob.setValue(triggerBlobText);
5862
}
59-
63+
64+
/**
65+
* This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
66+
*/
67+
@FunctionName("BlobTriggerUsingBlobClientToBlobTest")
68+
@StorageAccount("AzureWebJobsStorage")
69+
public void BlobTriggerToBlobTest(
70+
@BlobTrigger(name = "triggerBlob", path = "test-triggerinput-blobclient/{name}", dataType = "binary") BlobClient triggerBlobClient,
71+
@BindingName("name") String fileName,
72+
@BlobOutput(name = "outputBlob", path = "test-output-java-new/{name}", dataType = "binary") OutputBinding<byte[]> outputBlob,
73+
final ExecutionContext context
74+
) {
75+
context.getLogger().info("BlobTriggerUsingBlobClient triggered for blob: " + fileName);
76+
77+
// Download the blob content
78+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
79+
triggerBlobClient.downloadStream(outputStream);
80+
81+
// Set the downloaded content as output
82+
outputBlob.setValue(outputStream.toByteArray());
83+
context.getLogger().info("Blob content copied successfully from trigger blob to output blob.");
84+
}
85+
86+
/**
87+
* This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
88+
*/
89+
@FunctionName("BlobTriggerUsingBlobContainerClientToBlobTest")
90+
@StorageAccount("AzureWebJobsStorage")
91+
public void BlobTriggerToBlobTest(
92+
@BlobTrigger(name = "triggerBlob", path = "test-triggerinput-blobcontclient/{name}", dataType = "binary") BlobContainerClient triggerBlobContainerClient,
93+
@BindingName("name") String fileName,
94+
@BlobOutput(name = "outputBlob", path = "test-output-java-new/{name}", dataType = "binary") OutputBinding<byte[]> outputBlob,
95+
final ExecutionContext context
96+
) {
97+
context.getLogger().info("BlobTriggerUsingBlobContainerClient triggered for blob: " + fileName);
98+
99+
// Download the blob content
100+
BlobClient triggerBlobClient = triggerBlobContainerClient.getBlobClient(fileName);
101+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
102+
triggerBlobClient.downloadStream(outputStream);
103+
104+
// Set the downloaded content as output
105+
outputBlob.setValue(outputStream.toByteArray());
106+
context.getLogger().info("Blob content copied successfully from trigger blob to output blob.");
107+
}
108+
60109
public static class TestBlobData {
61110
public String blobText;
62111
}

0 commit comments

Comments
 (0)