{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.ParametersAction",
      "parameters" : [
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "OSMO_GSM_TESTER_BRANCH",
          "value" : "refs/heads/master"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "OSMO_GSM_TESTER_OPTS",
          "value" : ""
        }
      ]
    },
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$UserIdCause",
          "shortDescription" : "Started by user Neels Hofmeyr",
          "userId" : "neels",
          "userName" : "Neels Hofmeyr"
        }
      ]
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/neels/error_reporting" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 460,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "2a250155f5a588e30efeb9b6b929cc604b5a92d3",
            "branch" : [
              {
                "SHA1" : "2a250155f5a588e30efeb9b6b929cc604b5a92d3",
                "name" : "refs/remotes/origin/neels/error_reporting"
              }
            ]
          },
          "revision" : {
            "SHA1" : "2a250155f5a588e30efeb9b6b929cc604b5a92d3",
            "branch" : [
              {
                "SHA1" : "2a250155f5a588e30efeb9b6b929cc604b5a92d3",
                "name" : "refs/remotes/origin/neels/error_reporting"
              }
            ]
          }
        },
        "refs/remotes/origin/neels/msc-hlr" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 454,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "ab0fabab66c2a0c5a15fb2cf674a502e0ea3cb5a",
            "branch" : [
              {
                "SHA1" : "ab0fabab66c2a0c5a15fb2cf674a502e0ea3cb5a",
                "name" : "refs/remotes/origin/neels/msc-hlr"
              }
            ]
          },
          "revision" : {
            "SHA1" : "ab0fabab66c2a0c5a15fb2cf674a502e0ea3cb5a",
            "branch" : [
              {
                "SHA1" : "ab0fabab66c2a0c5a15fb2cf674a502e0ea3cb5a",
                "name" : "refs/remotes/origin/neels/msc-hlr"
              }
            ]
          }
        },
        "refs/remotes/origin/neels_test" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 34,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "8216484bcc83b2d7ee5638aafab379a174a1f7ec",
            "branch" : [
              {
                "SHA1" : "8216484bcc83b2d7ee5638aafab379a174a1f7ec",
                "name" : "refs/remotes/origin/neels_test"
              }
            ]
          },
          "revision" : {
            "SHA1" : "8216484bcc83b2d7ee5638aafab379a174a1f7ec",
            "branch" : [
              {
                "SHA1" : "8216484bcc83b2d7ee5638aafab379a174a1f7ec",
                "name" : "refs/remotes/origin/neels_test"
              }
            ]
          }
        },
        "refs/remotes/origin/report" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 61,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "fba8a30c41bf39c91d68bbdbb24f881ee421a115",
            "branch" : [
              {
                "SHA1" : "fba8a30c41bf39c91d68bbdbb24f881ee421a115",
                "name" : "refs/remotes/origin/report"
              }
            ]
          },
          "revision" : {
            "SHA1" : "fba8a30c41bf39c91d68bbdbb24f881ee421a115",
            "branch" : [
              {
                "SHA1" : "fba8a30c41bf39c91d68bbdbb24f881ee421a115",
                "name" : "refs/remotes/origin/report"
              }
            ]
          }
        },
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 591,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "4d63d920333c23996b4a2773aa7c363812971b37",
            "branch" : [
              {
                "SHA1" : "4d63d920333c23996b4a2773aa7c363812971b37",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "4d63d920333c23996b4a2773aa7c363812971b37",
            "branch" : [
              {
                "SHA1" : "4d63d920333c23996b4a2773aa7c363812971b37",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "4d63d920333c23996b4a2773aa7c363812971b37",
        "branch" : [
          {
            "SHA1" : "4d63d920333c23996b4a2773aa7c363812971b37",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "git://git.osmocom.org/osmo-gsm-tester"
      ],
      "scmName" : ""
    },
    {
      "_class" : "hudson.plugins.git.GitTagAction"
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "hudson.tasks.junit.TestResultAction",
      "failCount" : 1,
      "skipCount" : 0,
      "totalCount" : 4,
      "urlName" : "testReport"
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "log",
      "fileName" : "log",
      "relativePath" : "trial-591/last_run/log"
    },
    {
      "displayPath" : "trial-591-run.tgz",
      "fileName" : "trial-591-run.tgz",
      "relativePath" : "trial-591-run.tgz"
    }
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#591",
  "duration" : 485553,
  "estimatedDuration" : 2137594,
  "executor" : None,
  "fullDisplayName" : "osmo-gsm-tester_run #591",
  "id" : "591",
  "inProgress" : False,
  "keepLog" : True,
  "number" : 591,
  "queueId" : 30440,
  "result" : "FAILURE",
  "timestamp" : 1497364757319,
  "url" : "https://jenkins.osmocom.org/jenkins/job/osmo-gsm-tester_run/591/",
  "builtOn" : "osmo-gsm-tester-rnd",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/osmo_gsm_tester/trial.py",
          "src/osmo_gsm_tester/ofono_client.py",
          "selftest/log_test.ok",
          "selftest/suite_test.ok",
          "src/osmo_gsm_tester/process.py",
          "src/osmo_gsm_tester/template.py",
          "src/osmo_gsm_tester/osmo_bsc.py",
          "src/osmo_gsm_tester/event_loop.py",
          "src/osmo_gsm_tester/osmo_nitb.py",
          "src/osmo_gsm_tester/osmo_ctrl.py",
          "selftest/template_test.ok",
          "src/osmo_gsm_tester/pcap_recorder.py",
          "src/osmo_gsm_tester/osmo_mgcpgw.py",
          "src/osmo_gsm_tester/bts_osmotrx.py",
          "selftest/suite_test.py",
          "selftest/resource_test.py",
          "src/osmo_gsm_tester/resource.py",
          "src/osmo_gsm_tester/osmo_hlr.py",
          "src/osmo_gsm_tester/schema.py",
          "selftest/resource_test.ok",
          "selftest/log_test.py",
          "src/osmo_gsm_tester/osmo_msc.py",
          "src/osmo_gsm_tester/config.py",
          "src/osmo_gsm_tester/bts_sysmo.py",
          "selftest/config_test.ok",
          "src/osmo_gsm_tester/suite.py",
          "src/osmo_gsm_tester/log.py"
        ],
        "commitId" : "1a7a3f0e4318bccbd3ed177d5b07fa3618d06868",
        "timestamp" : 1497353521000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/neels",
          "fullName" : "Neels Hofmeyr"
        },
        "authorEmail" : "nhofmeyr@sysmocom.de",
        "comment" : "fix and refactor logging: drop 'with', simplify\u000aWith the recent fix of the junit report related issues, another issue\u000aarose: the 'with log.Origin' was changed to disallow __enter__ing an\u000aobject twice to fix problems, now still code would fail because it tries\u000ato do 'with' on the same object twice. The only reason is to ensure that\u000alogging is associated with a given object. Instead of complicating even\u000amore, implement differently.\u000aRefactor logging to simplify use: drop the 'with Origin' style\u000acompletely, and instead use the python stack to determine which objects\u000aare created by which, and which object to associate a log statement\u000awith.\u000aThe new way: we rely on the convention that each class instance has a\u000alocal\u000a'self' referencing the object instance. If we need to find an origin as\u000aa new object's parent, or to associate a log message with, we traverse\u000aeach stack frame, fetching the first local 'self' object that is a\u000alog.Origin class instance.\u000aHow to use:\u000aSimply call log.log() anywhere, and it finds an Origin object to log\u000afor, from the stack. Alternatively call self.log() for any Origin()\u000aobject to skip the lookup.\u000aCreate classes as child class of log.Origin and make sure to call \u000asuper().__init__(category, name). This constructor will magically find a\u000aparent Origin on the stack.\u000aWhen an exception happens, we first escalate the exception up through\u000acall scopes to where ever it is handled by log.log_exn(). This then\u000afinds an Origin object in the traceback's stack frames, no need to nest\u000ain 'with' scopes.\u000aHence the 'with log.Origin' now \"happens implicitly\", we can write pure\u000anatural python code, no more hassles with scope ordering.\u000aFurthermore, any frame can place additional logging information in a\u000aframe by calling log.ctx(). This is automatically inserted in the\u000aancestry associated with a log statement / exception.\u000aChange-Id: I5f9b53150f2bb6fa9d63ce27f0806f0ca6a45e90\u000a",
        "date" : "2017-06-13 13:32:01 +0200",
        "id" : "1a7a3f0e4318bccbd3ed177d5b07fa3618d06868",
        "msg" : "fix and refactor logging: drop 'with', simplify",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/bts_osmotrx.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/config.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/trial.py"
          },
          {
            "editType" : "edit",
            "file" : "selftest/log_test.ok"
          },
          {
            "editType" : "edit",
            "file" : "selftest/resource_test.ok"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/pcap_recorder.py"
          },
          {
            "editType" : "edit",
            "file" : "selftest/suite_test.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/osmo_nitb.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/osmo_hlr.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/template.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/osmo_msc.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/ofono_client.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/event_loop.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/bts_sysmo.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/osmo_bsc.py"
          },
          {
            "editType" : "edit",
            "file" : "selftest/config_test.ok"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/osmo_mgcpgw.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/schema.py"
          },
          {
            "editType" : "edit",
            "file" : "selftest/log_test.py"
          },
          {
            "editType" : "edit",
            "file" : "selftest/template_test.ok"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/osmo_ctrl.py"
          },
          {
            "editType" : "edit",
            "file" : "selftest/suite_test.ok"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/process.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/log.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/suite.py"
          },
          {
            "editType" : "edit",
            "file" : "selftest/resource_test.py"
          },
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/resource.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "selftest/log_test.py",
          "selftest/log_test.ok"
        ],
        "commitId" : "e4cd7910a544019f6c01ae8a8b5a26e6c85a361e",
        "timestamp" : 1497353557000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/neels",
          "fullName" : "Neels Hofmeyr"
        },
        "authorEmail" : "nhofmeyr@sysmocom.de",
        "comment" : "log_test.py: cosmetic follow-up\u000aThis is kept separate to not clutter up previous patch \u000aI5f9b53150f2bb6fa9d63ce27f0806f0ca6a45e90.\u000aChange-Id: I0ce50375fdb028da96c2159d577d8ed1967d4fe6\u000a",
        "date" : "2017-06-13 13:32:37 +0200",
        "id" : "e4cd7910a544019f6c01ae8a8b5a26e6c85a361e",
        "msg" : "log_test.py: cosmetic follow-up",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "selftest/log_test.ok"
          },
          {
            "editType" : "edit",
            "file" : "selftest/log_test.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/osmo_gsm_tester/ofono_client.py"
        ],
        "commitId" : "4d63d920333c23996b4a2773aa7c363812971b37",
        "timestamp" : 1497364677000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/neels",
          "fullName" : "Neels Hofmeyr"
        },
        "authorEmail" : "nhofmeyr@sysmocom.de",
        "comment" : "ofono_client: gracefully handle Scan() failure\u000aofono's NetworkRegistration.Scan() method fails sporadically. On\u000afailure, check if we are now registered to the desired network, and\u000aschedule another scan otherwise.\u000aFor instance it fails with org.ofono.Error.Failed if the modem starts to \u000aregister internally after we started Scan() and the registering succeeds \u000awhile we are still waiting for Scan() to finsih.\u000aChange-Id: I4a2265ee39a94daa00f525b1c7037a6775509425\u000a",
        "date" : "2017-06-13 14:37:57 +0000",
        "id" : "4d63d920333c23996b4a2773aa7c363812971b37",
        "msg" : "ofono_client: gracefully handle Scan() failure",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/osmo_gsm_tester/ofono_client.py"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/neels",
      "fullName" : "Neels Hofmeyr"
    }
  ]
}