Skip to content

Commit 5485bc8

Browse files
authored
Add more JSON Schema validation tests (#95)
1 parent e27aedb commit 5485bc8

File tree

6 files changed

+74
-15
lines changed

6 files changed

+74
-15
lines changed

schemaregistry/rules/encryption/encrypt-executor.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ export class FieldEncryptionExecutor extends FieldRuleExecutor {
8484
this.config = config
8585
}
8686

87-
type(): string {
87+
override type(): string {
8888
return 'ENCRYPT'
8989
}
9090

91-
newTransform(ctx: RuleContext): FieldTransform {
91+
override newTransform(ctx: RuleContext): FieldTransform {
9292
const cryptor = this.getCryptor(ctx)
9393
const kekName = this.getKekName(ctx)
9494
const dekExpiryDays = this.getDekExpiryDays(ctx)
@@ -97,7 +97,7 @@ export class FieldEncryptionExecutor extends FieldRuleExecutor {
9797
return transform
9898
}
9999

100-
async close(): Promise<void> {
100+
override async close(): Promise<void> {
101101
if (this.client != null) {
102102
await this.client.close()
103103
}

schemaregistry/serde/avro.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class AvroSerializer extends Serializer implements AvroSerde {
4545
}
4646
}
4747

48-
async serialize(topic: string, msg: any): Promise<Buffer> {
48+
override async serialize(topic: string, msg: any): Promise<Buffer> {
4949
if (this.client == null) {
5050
throw new Error('client is not initialized')
5151
}
@@ -126,7 +126,7 @@ export class AvroDeserializer extends Deserializer implements AvroSerde {
126126
}
127127
}
128128

129-
async deserialize(topic: string, payload: Buffer): Promise<any> {
129+
override async deserialize(topic: string, payload: Buffer): Promise<any> {
130130
if (!Buffer.isBuffer(payload)) {
131131
throw new Error('Invalid buffer')
132132
}
@@ -366,7 +366,7 @@ function resolveUnion(schema: Type, msg: any): Type | null {
366366
function getInlineTags(info: SchemaInfo, deps: Map<string, string>): Map<string, Set<string>> {
367367
const inlineTags = new Map<string, Set<string>>()
368368
getInlineTagsRecursively('', '', JSON.parse(info.schema), inlineTags)
369-
for (const depSchema of Object.values(deps)) {
369+
for (const depSchema of deps.values()) {
370370
getInlineTagsRecursively('', '', JSON.parse(depSchema), inlineTags)
371371
}
372372
return inlineTags

schemaregistry/serde/json.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export class JsonSerializer extends Serializer implements JsonSerde {
6565
}
6666
}
6767

68-
async serialize(topic: string, msg: any): Promise<Buffer> {
68+
override async serialize(topic: string, msg: any): Promise<Buffer> {
6969
if (this.client == null) {
7070
throw new Error('client is not initialized')
7171
}
@@ -139,7 +139,7 @@ export class JsonDeserializer extends Deserializer implements JsonSerde {
139139
}
140140
}
141141

142-
async deserialize(topic: string, payload: Buffer): Promise<any> {
142+
override async deserialize(topic: string, payload: Buffer): Promise<any> {
143143
if (!Buffer.isBuffer(payload)) {
144144
throw new Error('Invalid buffer')
145145
}

schemaregistry/serde/protobuf.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export class ProtobufSerializer extends Serializer implements ProtobufSerde {
110110
}
111111
}
112112

113-
async serialize(topic: string, msg: any): Promise<Buffer> {
113+
override async serialize(topic: string, msg: any): Promise<Buffer> {
114114
if (this.client == null) {
115115
throw new Error('client is not initialized')
116116
}
@@ -293,7 +293,7 @@ export class ProtobufDeserializer extends Deserializer implements ProtobufSerde
293293
}
294294
}
295295

296-
async deserialize(topic: string, payload: Buffer): Promise<any> {
296+
override async deserialize(topic: string, payload: Buffer): Promise<any> {
297297
if (!Buffer.isBuffer(payload)) {
298298
throw new Error('Invalid buffer')
299299
}

schemaregistry/serde/serde.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,6 @@ export abstract class Serializer extends Serde {
224224
return this.conf as SerializerConfig
225225
}
226226

227-
// serialize will serialize the given message
228227
abstract serialize(topic: string, msg: any): Promise<Buffer>
229228

230229
// GetID returns a schema ID for the given schema
@@ -282,6 +281,8 @@ export abstract class Deserializer extends Serde {
282281
return this.conf as DeserializerConfig
283282
}
284283

284+
abstract deserialize(topic: string, payload: Buffer): Promise<any>
285+
285286
async getSchema(topic: string, payload: Buffer, format?: string): Promise<SchemaInfo> {
286287
const magicByte = payload.subarray(0, 1)
287288
if (!magicByte.equals(MAGIC_BYTE)) {

test/schemaregistry/serde/json.spec.ts

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,15 @@ const rootSchema = `
3939
}
4040
}
4141
`
42-
42+
const rootSchema2020_12 = `
43+
{
44+
"$schema": "https://json-schema.org/draft/2020-12/schema",
45+
"type": "object",
46+
"properties": {
47+
"otherField": { "$ref": "DemoSchema" }
48+
}
49+
}
50+
`
4351
const demoSchema = `
4452
{
4553
"type": "object",
@@ -154,7 +162,10 @@ describe('JsonSerializer', () => {
154162
cacheCapacity: 1000
155163
}
156164
let client = SchemaRegistryClient.newClient(conf)
157-
let ser = new JsonSerializer(client, SerdeType.VALUE, {autoRegisterSchemas: true})
165+
let ser = new JsonSerializer(client, SerdeType.VALUE, {
166+
autoRegisterSchemas: true,
167+
validate: true
168+
})
158169
let obj = {
159170
intField: 123,
160171
doubleField: 45.67,
@@ -205,7 +216,10 @@ describe('JsonSerializer', () => {
205216
cacheCapacity: 1000
206217
}
207218
let client = SchemaRegistryClient.newClient(conf)
208-
let ser = new JsonSerializer(client, SerdeType.VALUE, {autoRegisterSchemas: true})
219+
let ser = new JsonSerializer(client, SerdeType.VALUE, {
220+
autoRegisterSchemas: true,
221+
validate: true
222+
})
209223

210224
let obj = {
211225
intField: 123,
@@ -226,7 +240,10 @@ describe('JsonSerializer', () => {
226240
cacheCapacity: 1000
227241
}
228242
let client = SchemaRegistryClient.newClient(conf)
229-
let ser = new JsonSerializer(client, SerdeType.VALUE, {useLatestVersion: true})
243+
let ser = new JsonSerializer(client, SerdeType.VALUE, {
244+
useLatestVersion: true,
245+
validate: true
246+
})
230247

231248
let info: SchemaInfo = {
232249
schemaType: 'JSON',
@@ -258,6 +275,47 @@ describe('JsonSerializer', () => {
258275
let obj2 = await deser.deserialize(topic, bytes)
259276
expect(obj2).toEqual(obj)
260277
})
278+
it('serialize reference 2020_12', async () => {
279+
let conf: ClientConfig = {
280+
baseURLs: [baseURL],
281+
cacheCapacity: 1000
282+
}
283+
let client = SchemaRegistryClient.newClient(conf)
284+
let ser = new JsonSerializer(client, SerdeType.VALUE, {
285+
useLatestVersion: true,
286+
validate: true
287+
})
288+
289+
let info: SchemaInfo = {
290+
schemaType: 'JSON',
291+
schema: demoSchema2020_12
292+
}
293+
await client.register('demo-value', info, false)
294+
295+
info = {
296+
schemaType: 'JSON',
297+
schema: rootSchema2020_12,
298+
references: [{
299+
name: 'DemoSchema',
300+
subject: 'demo-value',
301+
version: 1
302+
}]
303+
}
304+
await client.register(subject, info, false)
305+
306+
let obj = {
307+
intField: 123,
308+
doubleField: 45.67,
309+
stringField: 'hi',
310+
boolField: true,
311+
bytesField: Buffer.from([0, 0, 0, 1]).toString('base64')
312+
}
313+
let bytes = await ser.serialize(topic, obj)
314+
315+
let deser = new JsonDeserializer(client, SerdeType.VALUE, {})
316+
let obj2 = await deser.deserialize(topic, bytes)
317+
expect(obj2).toEqual(obj)
318+
})
261319
it('basic failing validation', async () => {
262320
let conf: ClientConfig = {
263321
baseURLs: [baseURL],

0 commit comments

Comments
 (0)