完成 0.2.0 预发布收口与中文安装器
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#include "TestHarness.h"
|
||||
|
||||
#include "src/ai/AIDiagnostics.h"
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QUrl>
|
||||
|
||||
QA_TEST(AIDiagnostics, RedactsCredentialsFromContextAndFreeText)
|
||||
{
|
||||
AIConfig config;
|
||||
config.provider = QStringLiteral("custom");
|
||||
config.protocol = QStringLiteral("openai-compatible");
|
||||
config.model = QStringLiteral("test-model");
|
||||
config.apiKey = QStringLiteral("sk-super-secret-value");
|
||||
|
||||
const QString context = AIDiagnostics::diagnosticContext(
|
||||
config,
|
||||
QUrl(QStringLiteral("https://example.test/v1/chat?api_key=query-secret&trace=visible")));
|
||||
const QString freeText = AIDiagnostics::safeTextSummary(
|
||||
QStringLiteral("Authorization: Bearer bearer-secret token=token-secret sk-another-secret-value"));
|
||||
|
||||
QA_EXPECT(!context.contains(QStringLiteral("sk-super-secret-value")));
|
||||
QA_EXPECT(!context.contains(QStringLiteral("query-secret")));
|
||||
QA_EXPECT(context.contains(QStringLiteral("trace=visible")));
|
||||
QA_EXPECT(!freeText.contains(QStringLiteral("bearer-secret")));
|
||||
QA_EXPECT(!freeText.contains(QStringLiteral("token-secret")));
|
||||
QA_EXPECT(!freeText.contains(QStringLiteral("sk-another-secret-value")));
|
||||
}
|
||||
|
||||
QA_TEST(AIDiagnostics, RedactsConversationAndCredentialFieldsFromJson)
|
||||
{
|
||||
const QByteArray body = QByteArrayLiteral(
|
||||
R"({"safe":"visible","apiKey":"api-secret","authorization":"Bearer header-secret","messages":[{"content":"private prompt"}],"nested":{"token":"token-secret"}})");
|
||||
|
||||
const QString summary = AIDiagnostics::responseBodySummary(body);
|
||||
QA_EXPECT(summary.contains(QStringLiteral("visible")));
|
||||
QA_EXPECT(!summary.contains(QStringLiteral("api-secret")));
|
||||
QA_EXPECT(!summary.contains(QStringLiteral("header-secret")));
|
||||
QA_EXPECT(!summary.contains(QStringLiteral("private prompt")));
|
||||
QA_EXPECT(!summary.contains(QStringLiteral("token-secret")));
|
||||
}
|
||||
|
||||
QA_TEST(AIDiagnostics, KeepsUsefulErrorMetadataWithoutCredentialLeakage)
|
||||
{
|
||||
const QByteArray body = QByteArrayLiteral(
|
||||
R"({"error":{"message":"API key sk-super-secret-value is invalid","code":"invalid_api_key","type":"authentication_error"},"content":"private response"})");
|
||||
|
||||
const QString error = AIDiagnostics::errorMessageFromBody(body);
|
||||
QA_EXPECT(error.contains(QStringLiteral("invalid")));
|
||||
QA_EXPECT(error.contains(QStringLiteral("invalid_api_key")));
|
||||
QA_EXPECT(!error.contains(QStringLiteral("sk-super-secret-value")));
|
||||
QA_EXPECT(!error.contains(QStringLiteral("private response")));
|
||||
}
|
||||
Reference in New Issue
Block a user