Skip to content

Commit 876d962

Browse files
Azurite
1 parent 088e234 commit 876d962

File tree

4 files changed

+63
-56
lines changed

4 files changed

+63
-56
lines changed

docs/modules/arangodb.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ npm install @testcontainers/arangodb --save-dev
1111
This example uses the [arangojs](https://www.npmjs.com/package/arangojs/v/6.0.0-alpha.0) library:
1212

1313
```bash
14-
npm install arangojs --save-dev
14+
npm install arangojs
1515
```
1616

1717
---
1818

19-
Choose an image from [Docker Hub](https://hub.docker.com/_/arangodb) and substitute `IMAGE`:
19+
Choose an image from [Docker Hub](https://hub.docker.com/_/arangodb) and substitute `IMAGE`.
2020

2121
<!--codeinclude-->
22-
[Creating an ArangoDB container](../../packages/modules/arangodb/src/arangodb-container.test.ts) inside_block:connectArangoDB
22+
[Creating an ArangoDB container](../../packages/modules/arangodb/src/arangodb-container.test.ts) inside_block:example
2323
<!--/codeinclude-->

docs/modules/azurite.md

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
# Azurite Module
2-
3-
[Azurite](https://github.com/Azure/Azurite) is an open source Azure Storage API compatible server (emulator). Based on Node.js, Azurite provides cross platform experiences for developers wanting to try Azure Storage easily in a local environment. Azurite simulates most of the commands supported by Azure Storage with minimal dependencies.
1+
# Azurite
42

53
## Install
64

@@ -10,26 +8,56 @@ npm install @testcontainers/azurite --save-dev
108

119
## Examples
1210

11+
These examples use the following libraries:
12+
13+
- [@azure/data-tables](https://www.npmjs.com/package/@azure/data-tables)
14+
15+
npm install @azure/data-tables
16+
17+
- [@azure/storage-blob](https://www.npmjs.com/package/@azure/storage-blob)
18+
19+
npm install @azure/storage-blob
20+
21+
- [@azure/storage-queue](https://www.npmjs.com/package/@azure/storage-queue)
22+
23+
npm install @azure/storage-queue
24+
25+
---
26+
27+
Choose an image from [Docker Hub](https://hub.docker.com/r/microsoft/azure-storage-azurite) and substitute `IMAGE`.
28+
29+
### Upload/download a blob
30+
1331
<!--codeinclude-->
14-
[Upload and download a blob:](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:uploadAndDownloadBlob
32+
[](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:uploadAndDownloadBlob
1533
<!--/codeinclude-->
1634

35+
### Send/receive queue messages
36+
1737
<!--codeinclude-->
18-
[Send and receive queue messages:](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:sendAndReceiveQueue
38+
[](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:sendAndReceiveQueue
1939
<!--/codeinclude-->
2040

41+
### Create/insert/fetch on a table
42+
2143
<!--codeinclude-->
22-
[Create and insert on table:](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:createAndInsertOnTable
44+
[](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:createAndInsertOnTable
2345
<!--/codeinclude-->
2446

47+
### Custom credentials
48+
2549
<!--codeinclude-->
26-
[Use custom credentials:](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:customCredentials
50+
[](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:customCredentials
2751
<!--/codeinclude-->
2852

53+
### Custom ports
54+
2955
<!--codeinclude-->
30-
[Use custom ports:](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:customPorts
56+
[](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:customPorts
3157
<!--/codeinclude-->
3258

59+
### In memory persistence
60+
3361
<!--codeinclude-->
34-
[Enable in-memory persistence:](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:inMemoryPersistence
62+
[](../../packages/modules/azurite/src/azurite-container.test.ts) inside_block:inMemoryPersistence
3563
<!--/codeinclude-->

packages/modules/arangodb/src/arangodb-container.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const IMAGE = getImage(__dirname);
66

77
describe("ArangoDB", { timeout: 180_000 }, () => {
88
it("should connect and return a query result", async () => {
9-
// connectArangoDB {
9+
// example {
1010
await using container = await new ArangoDBContainer(IMAGE).start();
1111

1212
const db = new Database({ url: container.getHttpUrl() });

packages/modules/azurite/src/azurite-container.test.ts

Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,65 +7,48 @@ import { AzuriteContainer } from "./azurite-container";
77
const IMAGE = getImage(__dirname);
88

99
describe("Azurite", { timeout: 240_000 }, () => {
10-
// uploadAndDownloadBlob {
1110
it("should upload and download blob with default credentials", async () => {
11+
// uploadAndDownloadBlob {
1212
await using container = await new AzuriteContainer(IMAGE).start();
1313

1414
const connectionString = container.getConnectionString();
15-
expect(connectionString).toBeTruthy();
16-
1715
const serviceClient = BlobServiceClient.fromConnectionString(connectionString);
1816
const containerClient = serviceClient.getContainerClient("test");
1917
await containerClient.createIfNotExists();
18+
2019
const blobName = "hello.txt";
2120
const content = "Hello world!";
2221
await containerClient.uploadBlockBlob(blobName, content, Buffer.byteLength(content));
2322

2423
const blobClient = containerClient.getBlockBlobClient(blobName);
25-
const downloadResponse = await blobClient.download(0, undefined);
26-
27-
const readable = downloadResponse.readableStreamBody as NodeJS.ReadableStream;
28-
expect(readable).toBeTruthy();
29-
30-
readable.setEncoding("utf8");
31-
let data = "";
32-
for await (const chunk of readable) {
33-
data += chunk;
34-
}
35-
36-
expect(data).toBe(content);
24+
const downloadBuffer = await blobClient.downloadToBuffer();
25+
expect(downloadBuffer.toString()).toBe(content);
26+
// }
3727
});
38-
// }
3928

40-
// sendAndReceiveQueue {
4129
it("should add to queue with default credentials", async () => {
30+
// sendAndReceiveQueue {
4231
await using container = await new AzuriteContainer(IMAGE).start();
4332

4433
const connectionString = container.getConnectionString();
45-
expect(connectionString).toBeTruthy();
46-
4734
const serviceClient = QueueServiceClient.fromConnectionString(connectionString);
4835
const queueName = "test-queue";
4936
await serviceClient.createQueue(queueName);
5037

38+
const messageText = "Hello world!";
5139
const queueClient = serviceClient.getQueueClient(queueName);
52-
53-
const message = "Hello world!";
54-
await queueClient.sendMessage(message);
40+
await queueClient.sendMessage(messageText);
5541

5642
const messages = await queueClient.receiveMessages();
57-
expect(messages.receivedMessageItems).toHaveLength(1);
58-
expect(messages.receivedMessageItems[0].messageText).toBe(message);
43+
expect(messages.receivedMessageItems).toMatchObject([{ messageText }]);
44+
// }
5945
});
60-
// }
6146

62-
// createAndInsertOnTable {
6347
it("should add to table with default credentials", async () => {
48+
// createAndInsertOnTable {
6449
await using container = await new AzuriteContainer(IMAGE).start();
6550

6651
const connectionString = container.getConnectionString();
67-
expect(connectionString).toBeTruthy();
68-
6952
const tableName = "person";
7053
const tableClient = TableClient.fromConnectionString(connectionString, tableName, {
7154
allowInsecureConnection: true,
@@ -79,16 +62,14 @@ describe("Azurite", { timeout: 240_000 }, () => {
7962
};
8063
await tableClient.createEntity(entity);
8164

82-
const e1 = await tableClient.listEntities().next();
83-
expect(e1.value).toBeTruthy();
84-
expect(e1.value.name).toBe(entity.name);
65+
const nextEntity = await tableClient.listEntities().next();
66+
expect(nextEntity.value).toEqual(expect.objectContaining(entity));
67+
// }
8568
});
86-
// }
8769

88-
// customCredentials {
8970
it("should be able to specify accountName and accountKey", async () => {
71+
// customCredentials {
9072
const accountName = "test-account";
91-
// Account key must be base64 encoded
9273
const accountKey = Buffer.from("test-key").toString("base64");
9374

9475
await using container = await new AzuriteContainer(IMAGE)
@@ -98,6 +79,7 @@ describe("Azurite", { timeout: 240_000 }, () => {
9879

9980
const credentials = new StorageSharedKeyCredential(accountName, accountKey);
10081
const serviceClient = new BlobServiceClient(container.getBlobEndpoint(), credentials);
82+
// }
10183

10284
const blobContainerName = "test";
10385
const containerClient = serviceClient.getContainerClient(blobContainerName);
@@ -107,13 +89,13 @@ describe("Azurite", { timeout: 240_000 }, () => {
10789
expect(blobContainer.value).toBeTruthy();
10890
expect(blobContainer.value.name).toBe(blobContainerName);
10991
});
110-
// }
11192

112-
// customPorts {
11393
it("should be able to specify custom ports", async () => {
94+
// customPorts {
11495
const blobPort = 13000;
11596
const queuePort = 14000;
11697
const tablePort = 15000;
98+
11799
await using container = await new AzuriteContainer(IMAGE)
118100
.withBlobPort({ container: 10001, host: blobPort })
119101
.withQueuePort({ container: 10002, host: queuePort })
@@ -123,6 +105,7 @@ describe("Azurite", { timeout: 240_000 }, () => {
123105
expect(container.getBlobPort()).toBe(blobPort);
124106
expect(container.getQueuePort()).toBe(queuePort);
125107
expect(container.getTablePort()).toBe(tablePort);
108+
// }
126109

127110
const connectionString = container.getConnectionString();
128111
expect(connectionString).toContain("13000");
@@ -133,17 +116,15 @@ describe("Azurite", { timeout: 240_000 }, () => {
133116
const containerClient = serviceClient.getContainerClient("test");
134117
await containerClient.createIfNotExists();
135118
});
136-
// }
137119

138-
// inMemoryPersistence {
139120
it("should be able to use in-memory persistence", async () => {
121+
// inMemoryPersistence {
140122
await using container = await new AzuriteContainer(IMAGE).withInMemoryPersistence().start();
123+
141124
const blobName = "hello.txt";
142125

143126
{
144127
const connectionString = container.getConnectionString();
145-
expect(connectionString).toBeTruthy();
146-
147128
const serviceClient = BlobServiceClient.fromConnectionString(connectionString);
148129
const containerClient = serviceClient.getContainerClient("test");
149130
await containerClient.createIfNotExists();
@@ -158,14 +139,12 @@ describe("Azurite", { timeout: 240_000 }, () => {
158139

159140
{
160141
const connectionString = container.getConnectionString();
161-
expect(connectionString).toBeTruthy();
162-
163142
const serviceClient = BlobServiceClient.fromConnectionString(connectionString);
164143
const containerClient = serviceClient.getContainerClient("test");
165144
const blobClient = containerClient.getBlockBlobClient(blobName);
166145
const blobExistsAfterRestart = await blobClient.exists();
167146
expect(blobExistsAfterRestart).toBeFalsy();
168147
}
148+
// }
169149
});
170-
// }
171150
});

0 commit comments

Comments
 (0)