Skip to content
Snippets Groups Projects
Commit 1b097db7 authored by Jack Hu's avatar Jack Hu
Browse files

init

parents
No related branches found
No related tags found
No related merge requests found
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
app.proto 0 → 100644
syntax = "proto3";
service App {
rpc GetProduct (ProductRequest) returns (Product) {}
rpc GetRandomProduct (EmptyRequest) returns (Product) {}
rpc GetAllProducts (EmptyRequest) returns (Products) {}
rpc GetAllCategories (EmptyRequest) returns (Categories) {}
rpc GetAllOrders (EmptyRequest) returns (Orders) {}
rpc GetAllUserOrders (UserRequest) returns (Orders) {}
rpc GetOrder (OrderRequest) returns (Order) {}
rpc GetUser (UserRequest) returns (User) {}
rpc GetAllUsers (EmptyRequest) returns (Users) {}
rpc PostOrder (Order) returns (Order) {}
rpc PatchAccountDetails (UserPatchRequest) returns (User) {}
}
message EmptyRequest {}
// Products
message ProductRequest {
string product_id = 1;
}
message Product {
string category_id = 1;
string images = 2;
int64 stock = 3;
int64 price = 4;
string description = 5;
string id = 6;
string name = 7;
}
message Products {
repeated Product products = 1;
}
// Orders
message OrderProduct {
string product_id = 1;
int64 quantity = 2;
}
message Order {
string user_id = 1;
string id = 2;
repeated OrderProduct products = 3;
int64 total_amount = 4;
}
message OrderRequest {
string id = 1;
}
message Orders {
repeated Order orders = 1;
}
// Categories
message Category {
string description = 1;
string id = 2;
int64 price = 3;
string name = 4;
}
message Categories {
repeated Category categories = 1;
}
// Users
message UserRequest {
string id = 1;
}
message UserPatchRequest {
string id = 1; // We assign user a unique ID, this shouldn't be changed. Following fields can be changed
string email = 2;
string password = 3;
}
message User {
string id = 1;
string email = 2;
}
message Users {
repeated User users = 1;
}
grpc.txt 0 → 100644
-----GRPC TESTS-----
randomProduct
39.50119981765747
product
37.52583360671997
allProducts
31.22728362083435
categories
29.51584138870239
allOrders
52.35934963226318
ordersByUser
42.86946668624878
user
31.468091630935668
allUsers
31.84824995994568
postOrder
32.73759984970093
patchUser
34.883433198928834
\ No newline at end of file
const grpc = require("@grpc/grpc-js");
const protoLoader = require("@grpc/proto-loader");
const PROTO_PATH = "./app.proto";
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
});
const app = grpc.loadPackageDefinition(packageDefinition);
const getTests = (endpoint, user, product) => {
const client = new app.App(endpoint, grpc.credentials.createInsecure());
return [
{
name: "randomProduct",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getRandomProduct({}, function (_err, response) {
if (_err) reject(_err);
resolve(response);
});
});
return [0, response];
},
},
{
name: "product",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getProduct(
{ product_id: product },
function (_err, response) {
if (_err) reject(_err);
resolve(response);
},
);
});
return [0, response];
},
},
{
name: "allProducts",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getAllProducts({}, function (_err, response) {
if (_err) reject(_err);
resolve(response);
});
});
return [0, response];
},
},
{
name: "categories",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getAllCategories({}, function (_err, response) {
if (_err) reject(_err);
resolve(response);
});
});
return [0, response];
},
},
{
name: "allOrders",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getAllOrders({}, function (_err, response) {
if (_err) reject(_err);
resolve(response);
});
});
return [0, response];
},
},
{
name: "ordersByUser",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getAllUserOrders(
{ id: user },
function (_err, response) {
if (_err) reject(_err);
resolve(response);
},
);
});
return [0, response];
},
},
{
name: "user",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getUser(
{ id: user },
function (_err, response) {
if (_err) reject(_err);
resolve(response);
},
);
});
return [0, response];
},
},
{
name: "allUsers",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.getAllUsers({}, function (_err, response) {
if (_err) reject(_err);
resolve(response);
});
});
return [0, response];
},
},
{
name: "postOrder",
run: async () => {
{
const response = await new Promise((resolve, reject) => {
client.postOrder(
{
user_id: user,
products: [
{
product_id: product,
quantity: 2,
},
],
total_amount: 600.0,
},
function (_err, response) {
if (_err) reject(_err);
resolve(response);
},
);
});
return [0, response];
}
},
},
{
name: "patchUser",
run: async () => {
const response = await new Promise((resolve, reject) => {
client.patchAccountDetails(
{
id: user,
email: "update@test.com",
name: "update test",
},
function (_err, response) {
if (_err) reject(_err);
resolve(response);
},
);
});
return [0, response];
},
},
];
};
module.exports = { getTests };
main.js 0 → 100644
const rest = require("./restTests");
const grpc = require("./grpcTests");
const { performance } = require("perf_hooks");
const REST_ENDPOINT = "http://18.209.23.10:3000";
const GRPC_ENDPOINT = "18.209.23.10:3001";
const runTest = async () => {
const start = performance.now();
await func();
const end = performance.now();
return end-start;
}
const avgRuntime = async (func, times) => {
const promises = [];
for (let i = 0; i < times; i++) {
promises.push(runTest(func));
}
const results = await Promise.all(promises);
return results.reduce((acc, curr) => acc + curr) / times;
};
async function getExamples() {
let resp = await fetch(REST_ENDPOINT + "/randomproduct");
let body = await resp.json();
const prodId = body.id;
resp = await fetch(REST_ENDPOINT + "/users");
body = await resp.json();
const userId = body[0].id;
return { product: prodId, user: userId };
}
async function runTests() {
const {user, product} = await getExamples();
const ITERATIONS = 5;
console.log("-----GRPC TESTS-----");
for (const test of grpc.getTests(GRPC_ENDPOINT, user, product)) {
console.log(test.name);
console.log(await avgRuntime(test.run, ITERATIONS));
}
console.log("-----REST TESTS-----");
for (const test of rest.getTests(REST_ENDPOINT, user, product)) {
console.log(test.name);
console.log(await avgRuntime(test.run, ITERATIONS));
}
}
runTests();
{
"name": "lab1-measure",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "lab1-measure",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"@grpc/grpc-js": "^1.9.0",
"@grpc/proto-loader": "^0.7.8",
"benchmark": "^2.1.4",
"google-protobuf": "^3.21.2"
}
},
"node_modules/@grpc/grpc-js": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.0.tgz",
"integrity": "sha512-H8+iZh+kCE6VR/Krj6W28Y/ZlxoZ1fOzsNt77nrdE3knkbSelW1Uus192xOFCxHyeszLj8i4APQkSIXjAoOxXg==",
"dependencies": {
"@grpc/proto-loader": "^0.7.0",
"@types/node": ">=12.12.47"
},
"engines": {
"node": "^8.13.0 || >=10.10.0"
}
},
"node_modules/@grpc/proto-loader": {
"version": "0.7.8",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.8.tgz",
"integrity": "sha512-GU12e2c8dmdXb7XUlOgYWZ2o2i+z9/VeACkxTA/zzAe2IjclC5PnVL0lpgjhrqfpDYHzM8B1TF6pqWegMYAzlA==",
"dependencies": {
"@types/long": "^4.0.1",
"lodash.camelcase": "^4.3.0",
"long": "^4.0.0",
"protobufjs": "^7.2.4",
"yargs": "^17.7.2"
},
"bin": {
"proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
"integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
},
"node_modules/@protobufjs/base64": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
},
"node_modules/@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
},
"node_modules/@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
"integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
},
"node_modules/@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
"dependencies": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"node_modules/@protobufjs/float": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
"integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
},
"node_modules/@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
"integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
},
"node_modules/@protobufjs/path": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
"integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
},
"node_modules/@protobufjs/pool": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
"integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
},
"node_modules/@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
},
"node_modules/@types/long": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
},
"node_modules/@types/node": {
"version": "20.4.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz",
"integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g=="
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/benchmark": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz",
"integrity": "sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==",
"dependencies": {
"lodash": "^4.17.4",
"platform": "^1.3.3"
}
},
"node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"engines": {
"node": ">=6"
}
},
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/google-protobuf": {
"version": "3.21.2",
"resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz",
"integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA=="
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"engines": {
"node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
},
"node_modules/long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"node_modules/platform": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
"integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
},
"node_modules/protobufjs": {
"version": "7.2.4",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz",
"integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==",
"hasInstallScript": true,
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/node": ">=13.7.0",
"long": "^5.0.0"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/protobufjs/node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
},
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"engines": {
"node": ">=10"
}
},
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.3",
"y18n": "^5.0.5",
"yargs-parser": "^21.1.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/yargs-parser": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"engines": {
"node": ">=12"
}
}
}
}
{
"name": "lab1-measure",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "node main.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "based JAML",
"license": "ISC",
"dependencies": {
"@grpc/grpc-js": "^1.9.0",
"@grpc/proto-loader": "^0.7.8",
"benchmark": "^2.1.4",
"google-protobuf": "^3.21.2"
}
}
rest.txt 0 → 100644
-----REST TESTS-----
randomProduct
50.12581658363342
product
33.34259166717529
allProducts
34.9744167804718
categories
32.45142498016357
allOrders
62.56571636199951
ordersByUser
52.71434187889099
user
31.619408416748048
allUsers
31.58545837402344
postOrder
36.04820818901062
patchUser
35.95475001335144
\ No newline at end of file
const getTests = (endpoint, user, product) => [
// {
// run: async () => {
// const resp = await fetch(endpoint + "/");
// const body = await resp.json();
// return [resp.status, body];
// },
// },
{
name: "randomProduct",
run: async () => {
const resp = await fetch(endpoint + "/randomproduct");
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "product",
run: async () => {
const resp = await fetch(
`${endpoint}/product/${product}`,
);
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "allProducts",
run: async () => {
const resp = await fetch(endpoint + "/products");
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "categories",
run: async () => {
const resp = await fetch(endpoint + "/categories");
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "allOrders",
run: async () => {
const resp = await fetch(endpoint + "/allorders");
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "ordersByUser",
run: async () => {
const resp = await fetch(`${endpoint}/orders?userId=${user}`);
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "user",
run: async () => {
const resp = await fetch(
`${endpoint}/user/${user}`,
);
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "allUsers",
run: async () => {
const resp = await fetch(endpoint + "/users");
const body = await resp.json();
return [resp.status, body];
},
},
{
name: "postOrder",
run: async () => {
const resp = await fetch(endpoint + "/orders", {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
user_id: user,
products: [
{
product_id: product,
quantity: 2,
},
],
total_amount: 600.0,
}),
});
const body = null;
return [resp.status, body];
},
},
{
name: "patchUser",
run: async () => {
const resp = await fetch(
endpoint + `/user/${user}`,
{
method: "PATCH",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
id: user,
email: "update@test.com",
name: "update test",
}),
},
);
const body = null;
return [resp.status, body];
},
},
];
module.exports = { getTests };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment