[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] 02/02: anastasis-core: fix policy suggestion and add
From: |
gnunet |
Subject: |
[taler-wallet-core] 02/02: anastasis-core: fix policy suggestion and add test case |
Date: |
Mon, 08 Nov 2021 15:52:43 +0100 |
This is an automated email from the git hooks/post-receive script.
dold pushed a commit to branch master
in repository wallet-core.
commit 8da58bd4943cc0dc407acd62a168412301b07717
Author: Florian Dold <florian@dold.me>
AuthorDate: Mon Nov 8 15:51:39 2021 +0100
anastasis-core: fix policy suggestion and add test case
---
packages/anastasis-core/src/anastasis-data.ts | 9 +++++
.../anastasis-core/src/policy-suggestion.test.ts | 44 ++++++++++++++++++++++
packages/anastasis-core/src/policy-suggestion.ts | 25 +++++++++---
3 files changed, 72 insertions(+), 6 deletions(-)
diff --git a/packages/anastasis-core/src/anastasis-data.ts
b/packages/anastasis-core/src/anastasis-data.ts
index 4946e9df..e24cdc8a 100644
--- a/packages/anastasis-core/src/anastasis-data.ts
+++ b/packages/anastasis-core/src/anastasis-data.ts
@@ -1,6 +1,7 @@
// This file is auto-generated, do not modify.
// Generated from v0.2.0-4-g61ea83c on Tue, 05 Oct 2021 10:40:32 +0200
// To re-generate, run contrib/gen-ts.sh from the main anastasis code base.
+// XXX: Modified for demo, allowing demo providers for EUR
export const anastasisData = {
providersList: {
@@ -15,6 +16,14 @@ export const anastasisData = {
url: "https://kudos.demo.anastasis.lu/",
currency: "KUDOS",
},
+ {
+ url: "https://anastasis.demo.taler.net/",
+ currency: "EUR",
+ },
+ {
+ url: "https://kudos.demo.anastasis.lu/",
+ currency: "EUR",
+ },
{
url: "http://localhost:8086/",
currency: "TESTKUDOS",
diff --git a/packages/anastasis-core/src/policy-suggestion.test.ts
b/packages/anastasis-core/src/policy-suggestion.test.ts
new file mode 100644
index 00000000..6370825d
--- /dev/null
+++ b/packages/anastasis-core/src/policy-suggestion.test.ts
@@ -0,0 +1,44 @@
+import { j2s } from "@gnu-taler/taler-util";
+import test from "ava";
+import { ProviderInfo, suggestPolicies } from "./policy-suggestion.js";
+
+test("policy suggestion", async (t) => {
+ const methods = [
+ {
+ challenge: "XXX",
+ instructions: "SMS to 123",
+ type: "sms",
+ },
+ {
+ challenge: "XXX",
+ instructions: "What is the meaning of life?",
+ type: "question",
+ },
+ {
+ challenge: "XXX",
+ instructions: "email to foo@bar.com",
+ type: "email",
+ },
+ ];
+ const providers: ProviderInfo[] = [
+ {
+ methodCost: {
+ sms: "KUDOS:1",
+ },
+ url: "prov1",
+ },
+ {
+ methodCost: {
+ question: "KUDOS:1",
+ },
+ url: "prov2",
+ },
+ ];
+ const res1 = suggestPolicies(methods, providers);
+ t.assert(res1.policies.length === 1);
+ const res2 = suggestPolicies([...methods].reverse(), providers);
+ t.assert(res2.policies.length === 1);
+
+ const res3 = suggestPolicies(methods, [...providers].reverse());
+ t.assert(res3.policies.length === 1);
+});
diff --git a/packages/anastasis-core/src/policy-suggestion.ts
b/packages/anastasis-core/src/policy-suggestion.ts
index 7eb6c21c..2c25caaa 100644
--- a/packages/anastasis-core/src/policy-suggestion.ts
+++ b/packages/anastasis-core/src/policy-suggestion.ts
@@ -84,9 +84,16 @@ function assignProviders(
for (const provSel of providerSelections) {
// First, check if selection is even possible with the methods offered
let possible = true;
- for (const methIndex in provSel) {
- const provIndex = provSel[methIndex];
+ for (const methSelIndex in provSel) {
+ const provIndex = provSel[methSelIndex];
+ if (typeof provIndex !== "number") {
+ throw Error("invariant failed");
+ }
+ const methIndex = methodSelection[methSelIndex];
const meth = methods[methIndex];
+ if (!meth) {
+ throw Error("invariant failed");
+ }
const prov = providers[provIndex];
if (!prov.methodCost[meth.type]) {
possible = false;
@@ -96,7 +103,6 @@ function assignProviders(
if (!possible) {
continue;
}
-
// Evaluate diversity, always prefer policies
// that increase diversity.
const providerSet = new Set<string>();
@@ -163,9 +169,18 @@ function assignProviders(
/**
* A provider selection maps a method selection index to a provider index.
+ *
+ * I.e. "PSEL[i] = x" means that provider with index "x" should be used
+ * for method with index "MSEL[i]"
*/
type ProviderSelection = number[];
+/**
+ * A method selection "MSEL[j] = y" means that policy method j
+ * should use method y.
+ */
+type MethodSelection = number[];
+
/**
* Compute provider mappings.
* Enumerates all n-combinations with repetition of m providers.
@@ -184,7 +199,7 @@ function enumerateProviderMappings(
}
for (let j = start; j < m; j++) {
a[i] = j;
- sel(i + 1, j);
+ sel(i + 1, 0);
if (limit && selections.length >= limit) {
break;
}
@@ -199,8 +214,6 @@ interface PolicySelectionResult {
policy_providers: PolicyProvider[];
}
-type MethodSelection = number[];
-
/**
* Compute method selections.
* Enumerates all n-combinations without repetition of m methods.
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.