Skip to content

Commit 39277ce

Browse files
committed
added protoParser test suite, this protoParser version saves multiple protoFiles
1 parent 5df8366 commit 39277ce

File tree

3 files changed

+127
-63
lines changed

3 files changed

+127
-63
lines changed

__tests__/protoParserTests.js

Lines changed: 82 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,88 @@
11
import protoParser from '../src/client/components/composer/protos/protoParser';
2-
import {remote} from "electron";
32

43

5-
beforeEach(() => {
6-
const protoFile = `syntax = 'proto3';
4+
describe('testing protoParser', ()=> {
75

8-
package helloworld;
6+
const protoFile = `syntax = 'proto3';
7+
8+
package helloworld;
9+
10+
// The greeting service definition.
11+
service Greeter {
12+
// Sends a greeting
13+
rpc SayHello (HelloRequest) returns (HelloReply) {}
14+
rpc SayHelloCS (stream HelloRequest) returns (HelloReply) {}
15+
rpc SayHellos (HelloRequest) returns (stream HelloReply) {}
16+
rpc SayHelloBidi (stream HelloRequest) returns (stream HelloReply) {}
17+
}
18+
19+
// The request message containing the user's name.
20+
message HelloRequest {
21+
string name = 1;
22+
}
23+
24+
// The response message containing the greetings
25+
message HelloReply {
26+
string message = 1;
27+
}
28+
29+
// The request message containing the user's name.
30+
message HelloHowOldRequest {
31+
int32 age = 1;
32+
}
33+
message HelloAge {
34+
int32 age = 1;
35+
}`
36+
describe('parser parses protos correctly', ()=> {
37+
it('should get packageName', () => {
38+
const parsedProto = protoParser(protoFile)
39+
.then(data => {
40+
// console.log(d)
41+
expect(data.packageName).toEqual('helloworld')
42+
})
43+
44+
})
45+
it('should get serviceArray', () => {
46+
const testArr = [{
47+
messages: [{}, {}, {}, {}],
48+
name: 'Greeter',
49+
packageName: 'helloworld',
50+
rpcs: [{}, {}, {}, {}],
51+
52+
}]
53+
const parsedProto = protoParser(protoFile)
54+
.then(data => {
55+
// console.log(d)
56+
expect(data.serviceArr[0].messages).toHaveLength(4);
57+
expect(data.serviceArr[0].rpcs).toHaveLength(4);
58+
expect(data.serviceArr[0].name).toEqual('Greeter');
59+
expect(data.serviceArr[0].packageName).toEqual('helloworld');
60+
})
61+
62+
})
963

10-
// The greeting service definition.
11-
service Greeter {
12-
// Sends a greeting
13-
rpc SayHello (HelloRequest) returns (HelloReply) {}
14-
rpc SayHelloCS (stream HelloRequest) returns (HelloReply) {}
15-
rpc SayHellos (HelloRequest) returns (stream HelloReply) {}
16-
rpc SayHelloBidi (stream HelloRequest) returns (stream HelloReply) {}
17-
}
64+
it('should fill message content', () => {
65+
const testArr = [{
66+
messages: [
67+
{name: "HelloRequest", def: {name: {type: "TYPE_STRING", nested: false, dependent: ''}}},
68+
{name: "HelloRequest", def: {name: {type: "TYPE_STRING", nested: false, dependent: ''}}},
69+
{name: "HelloRequest", def: {name: {type: "TYPE_STRING", nested: false, dependent: ''}}},
70+
{name: "HelloRequest", def: {name: {type: "TYPE_STRING", nested: false, dependent: ''}}}
71+
],
72+
name: 'Greeter',
73+
packageName: 'helloworld',
74+
rpcs: [{}, {}, {}, {}],
75+
76+
}]
77+
const parsedProto = protoParser(protoFile)
78+
.then(data => {
79+
expect(data.serviceArr[0].messages[0]).toEqual(testArr[0].messages[0]);
80+
expect(data.serviceArr[0].messages[0].def.name.type).toEqual("TYPE_STRING");
81+
})
82+
83+
})
84+
85+
86+
})
87+
})
1888

19-
// The request message containing the user's name.
20-
message HelloRequest {
21-
string name = 1;
22-
}
23-
24-
// The response message containing the greetings
25-
message HelloReply {
26-
string message = 1;
27-
}
28-
29-
// The request message containing the user's name.
30-
message HelloHowOldRequest {
31-
int32 age = 1;
32-
}
33-
message HelloAge {
34-
int32 age = 1;
35-
}`
36-
})

src/client/components/composer/protos/protoParser.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const fs = require('fs');
22
const grpc = require('grpc');
33
const protoLoader = require('@grpc/proto-loader');
4-
const path = require('path')
4+
const path = require('path');
5+
const uuid = require('uuid');
56

67
//temp for testing >>>>
78
// let tempData = fs.readFileSync(path.join(process.cwd(), 'grpc_mockData/protos/route_guide.proto'), 'utf-8')
@@ -16,16 +17,26 @@ async function protoParserFunc(protoBodyData) {
1617
let protoStorage = {};
1718
//store the original .proto content in the storage before parsing
1819
protoStorage.protoMaster = protoBodyData;
19-
20+
//make unique protoID for file we are saving
21+
let protoID = Math.floor(Math.random() * 1000);
22+
//if file path for that ID already exists, increment the ID
23+
try {
24+
while (fs.existsSync('src/client/components/composer/protos/' + protoID + '.proto')) {
25+
//file exists
26+
protoID += 1;
27+
}
28+
} catch(err) {
29+
console.error(err)
30+
}
2031
// write to saveProto file for interaction with the server
2132
// const dirName = remote.app.getAppPath(); // uncomment when done testing above
22-
fs.writeFileSync(path.join(process.cwd(), 'src/client/components/composer/protos/saveProto.proto'), protoBodyData, 'utf-8')
33+
fs.writeFileSync(path.join(process.cwd(), 'src/client/components/composer/protos/' + protoID + '.proto'), protoBodyData, 'utf-8')
2334
console.log('Proto file has been saved')
2435
// });
2536

2637
// define the modular client for testing
2738
// declare path variable of imported proto file
28-
const PROTO_PATH = path.join(process.cwd(), 'src/client/components/composer/protos/saveProto.proto');
39+
const PROTO_PATH = path.join(process.cwd(), 'src/client/components/composer/protos/' + protoID + '.proto');
2940

3041
// create gRPC package options
3142
const protoOptionsObj = {
Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,30 @@
1-
syntax = "proto3";
2-
3-
package helloworld;
4-
5-
// The greeting service definition.
6-
service Greeter {
7-
// Sends a greeting
8-
rpc SayHello (HelloRequest) returns (HelloReply) {}
9-
rpc SayHelloCS (stream HelloRequest) returns (HelloReply) {}
10-
rpc SayHellos (HelloRequest) returns (stream HelloReply) {}
11-
rpc SayHelloBidi (stream HelloRequest) returns (stream HelloReply) {}
12-
}
13-
14-
service Butler {
15-
// Sends a greeting
16-
rpc SayHello (HelloRequest) returns (HelloReply) {}
17-
rpc SayHelloCS (stream HelloRequest) returns (HelloReply) {}
18-
rpc SayHellos (HelloRequest) returns (stream HelloReply) {}
19-
rpc SayHelloBidi (stream HelloRequest) returns (stream HelloReply) {}
20-
}
21-
// The request message containing the user's name.
22-
message HelloRequest {
23-
string name = 1;
24-
}
25-
26-
// The response message containing the greetings
27-
message HelloReply {
28-
string message = 1;
29-
}
1+
syntax = 'proto3';
2+
3+
package helloworld;
4+
5+
// The greeting service definition.
6+
service Greeter {
7+
// Sends a greeting
8+
rpc SayHello (HelloRequest) returns (HelloReply) {}
9+
rpc SayHelloCS (stream HelloRequest) returns (HelloReply) {}
10+
rpc SayHellos (HelloRequest) returns (stream HelloReply) {}
11+
rpc SayHelloBidi (stream HelloRequest) returns (stream HelloReply) {}
12+
}
13+
14+
// The request message containing the user's name.
15+
message HelloRequest {
16+
string name = 1;
17+
}
18+
19+
// The response message containing the greetings
20+
message HelloReply {
21+
string message = 1;
22+
}
23+
24+
// The request message containing the user's name.
25+
message HelloHowOldRequest {
26+
int32 age = 1;
27+
}
28+
message HelloAge {
29+
int32 age = 1;
30+
}

0 commit comments

Comments
 (0)