gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]