У меня есть этот вспомогательный класс, который помогает сгенерировать заголовок запроса и вернуть его как request.SuperAgentRequest
, используя superagent-bluebird-promise
.
Мой вопрос здесь
Как мне протестировать мой запрос? Учитывая, что возвращаемый результат всегда зашифрован.
Как проверить security.decryptJWE
?
Что я делал до сих пор в своем модульном тестировании, так это проверял только количество раз, когда вызывается функция.
Класс юнит-теста:
let sendRequestSpy = sinon.spy(helper, "sendRequest");
main.updateInfo();
sinon.assert.callCount(sendRequestSpy, 10);
вспомогательный класс:
const restClient = require('superagent-bluebird-promise');
function sendRequest(id) {
...
_.set(headers, "Authorization", authHeaders);
let request = restClient.get(url);
// Set headers
if (!_.isUndefined(headers) && !_.isEmpty(headers)) {
request.set(headers);
}
return request;
}
основной класс:
function updateInfo {
...
for (var i = 0; i < list.length; i++) {
let request = helper.sendRequest(id);
request.buffer(true).end(function (err, res) {
...
let data = {
body: res.body,
text: res.text
};
let apiData = data.text;
let privateKey = "./resource/priv_key.pem";
var jweParts = apiData.split(".");
security.decryptJWE(jweParts[0], jweParts[1], jweParts[2], jweParts[3], jweParts[4], privateKey)
.then(apiData => {
...
//process here
}
}
}
}
класс безопасности:
...
security.decryptJWE = function decryptJWE(header, encryptedKey, iv, cipherText, tag, privateKey) {
console.log("Decrypting JWE".green + " (Format: " + "header".red + "." + "encryptedKey".cyan + "." + "iv".green + "." + "cipherText".magenta + "." + "tag".yellow + ")");
console.log(header.red + "." + encryptedKey.cyan + "." + iv.green + "." + cipherText.magenta + "." + tag.yellow);
return new Promise((resolve, reject) => {
var keystore = jose.JWK.createKeyStore();
console.log((new Buffer(header, 'base64')).toString('ascii'));
var data = {
"type": "compact",
"ciphertext": cipherText,
"protected": header,
"encrypted_key": encryptedKey,
"tag": tag,
"iv": iv,
"header": JSON.parse(jose.util.base64url.decode(header).toString())
};
keystore.add(fs.readFileSync(privateKey, 'utf8'), "pem")
.then(function (jweKey) {
// {result} is a jose.JWK.Key
jose.JWE.createDecrypt(jweKey)
.decrypt(data)
.then(function (result) {
resolve(JSON.parse(result.payload.toString()));
})
.catch(function (error) {
reject(error);
});
});
})
.catch(error => {
console.error("Error with decrypting JWE: %s".red, error);
throw "Error with decrypting JWE";
})
}