]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/async/SendTransactionTask.java
Transaction saver task: add 30% probability of exception when simulating network...
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / async / SendTransactionTask.java
index b670125903213c748f4beeb8f2fd2cf4c7fe7ec2..4c3bc477b8ddfeb43c82bd5e9268cb6f0105b232 100644 (file)
@@ -45,6 +45,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import static android.os.SystemClock.sleep;
+import static net.ktnx.mobileledger.utils.Logger.debug;
 
 public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void> {
     private final TaskCallback taskCallback;
@@ -59,6 +60,19 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
         mProfile = profile;
     }
     private boolean sendOK() throws IOException {
+//        if (BuildConfig.DEBUG) {
+//            try {
+//                Thread.sleep(1500);
+//                if (Math.random() > 0.3)
+//                    throw new RuntimeException("Simulated test exception");
+//            }
+//            catch (InterruptedException ex) {
+//                Logger.debug("network", ex.toString());
+//            }
+//
+//            return true;
+//        }
+
         HttpURLConnection http = NetworkUtil.prepareConnection(mProfile, "add");
         http.setRequestMethod("PUT");
         http.setRequestProperty("Content-Type", "application/json");
@@ -75,14 +89,15 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
         http.setDoInput(true);
         http.addRequestProperty("Content-Length", String.valueOf(bodyBytes.length));
 
-        Log.d("network", "request header: " + http.getRequestProperties().toString());
+        debug("network", "request header: " + http.getRequestProperties()
+                                                  .toString());
 
         try (OutputStream req = http.getOutputStream()) {
-            Log.d("network", "Request body: " + body);
+            debug("network", "Request body: " + body);
             req.write(bodyBytes);
 
             final int responseCode = http.getResponseCode();
-            Log.d("network",
+            debug("network",
                     String.format("Response: %d %s", responseCode, http.getResponseMessage()));
 
             try (InputStream resp = http.getErrorStream()) {
@@ -96,7 +111,7 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
                     default:
                         BufferedReader reader = new BufferedReader(new InputStreamReader(resp));
                         String line = reader.readLine();
-                        Log.d("network", "Response content: " + line);
+                        debug("network", "Response content: " + line);
                         throw new IOException(
                                 String.format("Error response code %d", responseCode));
                 }
@@ -118,27 +133,30 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
 
         UrlEncodedFormData params = new UrlEncodedFormData();
         params.addPair("_formid", "identify-add");
-        if (token != null) params.addPair("_token", token);
+        if (token != null)
+            params.addPair("_token", token);
         params.addPair("date", Globals.formatLedgerDate(ltr.getDate()));
         params.addPair("description", ltr.getDescription());
         for (LedgerTransactionAccount acc : ltr.getAccounts()) {
             params.addPair("account", acc.getAccountName());
             if (acc.isAmountSet())
                 params.addPair("amount", String.format(Locale.US, "%1.2f", acc.getAmount()));
-            else params.addPair("amount", "");
+            else
+                params.addPair("amount", "");
         }
 
         String body = params.toString();
         http.addRequestProperty("Content-Length", String.valueOf(body.length()));
 
-        Log.d("network", "request header: " + http.getRequestProperties().toString());
+        debug("network", "request header: " + http.getRequestProperties()
+                                                  .toString());
 
         try (OutputStream req = http.getOutputStream()) {
-            Log.d("network", "Request body: " + body);
+            debug("network", "Request body: " + body);
             req.write(body.getBytes(StandardCharsets.US_ASCII));
 
             try (InputStream resp = http.getInputStream()) {
-                Log.d("update_accounts", String.valueOf(http.getResponseCode()));
+                debug("update_accounts", String.valueOf(http.getResponseCode()));
                 if (http.getResponseCode() == 303) {
                     // everything is fine
                     return true;
@@ -155,10 +173,10 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
                             Matcher m = reSessionCookie.matcher(cookie);
                             if (m.matches()) {
                                 session = m.group(1);
-                                Log.d("network", "new session is " + session);
+                                debug("network", "new session is " + session);
                             }
                             else {
-                                Log.d("network", "set-cookie: " + cookie);
+                                debug("network", "set-cookie: " + cookie);
                                 Log.w("network",
                                         "Response Set-Cookie headers is not a _SESSION one");
                             }
@@ -173,12 +191,12 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
                             "<input type=\"hidden\" name=\"_token\" value=\"([^\"]+)\">");
                     String line;
                     while ((line = reader.readLine()) != null) {
-                        //Log.d("dump", line);
+                        //debug("dump", line);
                         Matcher m = re.matcher(line);
                         if (m.matches()) {
                             token = m.group(1);
-                            Log.d("save-transaction", line);
-                            Log.d("save-transaction", "Token=" + token);
+                            debug("save-transaction", line);
+                            debug("save-transaction", "Token=" + token);
                             return false;       // retry
                         }
                     }
@@ -201,10 +219,10 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
             if (!sendOK()) {
                 int tried = 0;
                 while (!legacySendOK()) {
-                        tried++;
-                        if (tried >= 2)
-                            throw new IOException(String.format("aborting after %d tries", tried));
-                        sleep(100);
+                    tried++;
+                    if (tried >= 2)
+                        throw new IOException(String.format("aborting after %d tries", tried));
+                    sleep(100);
                 }
             }
         }