Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: empty-node-fetch-response #58

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions integrations/node-fetch/require.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { getRequestHeader, getResponseHeader } from "../express/middleware";
import { getReasonPhrase } from "http-status-codes";
import { DataBytes } from "../../proto/services/DataBytes";
import { MockIds } from "../../mock/mock";
import { MODE_OFF } from "../../src/mode";

// @ts-ignore
Hook(["node-fetch"], function (exported) {
Expand All @@ -37,6 +38,9 @@ export function wrappedNodeFetch(fetch: any) {
url: any,
options: any
) {
if (process.env.KEPLOY_MODE == MODE_OFF) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the context should be created in middleware. here we can do an actual fetch call along console in below if block

if (
      getExecutionContext() == undefined ||
      getExecutionContext().context == undefined

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @re-Tick

It makes sense not to create a context here and directly calling the fetch function. I've incorporated this change, but a bit differently.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the user have not provided the KEPLOY_MODE env variable then, it will still do the same problem.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is correct. but probably that is the ideal behavior right? If the user isn't providing the KEPLOY_MODE then it's better to return some error and inform the user, instead of directly assuming OFF mode.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes we should console an error to inform the user but also we should do the actual function call so, that the user application do not break due to Keploy SDK integration

Copy link
Contributor

@re-Tick re-Tick Mar 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is correct. but probably that is the ideal behavior right? If the user isn't providing the KEPLOY_MODE then it's better to return some error and inform the user, instead of directly assuming OFF mode.

The default value of KEPLOY_MODE is "off". So, if the env variable is empty then, user application should run on off mode.

Here, the issue is that when user have missed the router integration in its application, then the context in async map is empty. The behaviour should be to log an error message and return the outputs of the actual wrapped function call.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay. Understood. My apologies, I wasn't aware that default KEPLOY_MODE is "off". In that case, what you are suggesting, makes sense. I've made the required changes. @re-Tick Can you please review this again?

return fetchFunc.apply(this, [url, options]);
}
if (
getExecutionContext() == undefined ||
getExecutionContext().context == undefined
Expand Down Expand Up @@ -143,8 +147,6 @@ export function wrappedNodeFetch(fetch: any) {
});
resp = new fetch.Response(Readable.from(buf), rinit);
break;
case "off":
return fetchFunc.apply(this, [url, options]);
default:
console.debug(
"mode is not valid. Please set valid keploy mode using env variables"
Expand Down