1
2
3
4
5 package com.jcabi.dynamo;
6
7 import com.jcabi.dynamo.mock.MadeTable;
8 import com.jcabi.dynamo.retry.ReRegion;
9 import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition;
10 import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest;
11 import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement;
12 import software.amazon.awssdk.services.dynamodb.model.KeyType;
13 import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput;
14 import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType;
15
16
17
18
19
20 final class RegionMock {
21
22
23
24
25 private final transient String ahash;
26
27
28
29
30 private final transient String arrange;
31
32
33
34
35 private final transient int prt;
36
37
38
39
40 RegionMock() {
41 this(
42 "hash-key",
43 "range-key",
44 Integer.parseInt(
45 System.getProperty("failsafe.port")
46 )
47 );
48 }
49
50
51
52
53
54
55
56 RegionMock(final String hash, final String range, final int port) {
57 this.ahash = hash;
58 this.arrange = range;
59 this.prt = port;
60 }
61
62
63
64
65
66 public int port() {
67 return this.prt;
68 }
69
70
71
72
73
74 public String hash() {
75 return this.ahash;
76 }
77
78
79
80
81
82 public String range() {
83 return this.arrange;
84 }
85
86
87
88
89
90
91
92 public Region get(final String table) throws Exception {
93 final Region region = new Region.Simple(
94 new Credentials.Direct(Credentials.TEST, this.prt)
95 );
96 final MadeTable mocker = new MadeTable(
97 region,
98 CreateTableRequest.builder()
99 .tableName(table)
100 .provisionedThroughput(
101 ProvisionedThroughput.builder()
102 .readCapacityUnits(1L)
103 .writeCapacityUnits(1L)
104 .build()
105 )
106 .attributeDefinitions(
107 AttributeDefinition.builder()
108 .attributeName(this.ahash)
109 .attributeType(ScalarAttributeType.S)
110 .build(),
111 AttributeDefinition.builder()
112 .attributeName(this.arrange)
113 .attributeType(ScalarAttributeType.N)
114 .build()
115 )
116 .keySchema(
117 KeySchemaElement.builder()
118 .attributeName(this.ahash)
119 .keyType(KeyType.HASH)
120 .build(),
121 KeySchemaElement.builder()
122 .attributeName(this.arrange)
123 .keyType(KeyType.RANGE)
124 .build()
125 )
126 .build()
127 );
128 mocker.create();
129 mocker.createIfAbsent();
130 return new ReRegion(region);
131 }
132
133 }