public void ValidUser()
    {
        MockLogger3 logger = new MockLogger3();
        logger.ExpectedName = "AccessControl";
        logger.AddExpectedMsg(
          "Checking access for dave to secrets");
        logger.AddExpectedMsg("Access granted");

        // set up the mock database
        MockDbConnection conn = new MockDbConnection();
        MockCommand cmd = new MockCommand();
        MockDataReader rdr = new MockDataReader();

        conn.SetExpectedCommand(cmd);
        cmd.SetExpectedCommandText(
          AccessController1.CHECK_SQL);
        cmd.SetExpectedExecuteCalls(1);
        cmd.SetExpectedParameter(
          new MockDataParameter("@user",     "dave"));
        cmd.SetExpectedParameter(
          new MockDataParameter("@password", "shhh"));
        cmd.SetExpectedParameter(
          new MockDataParameter("@resource", "secrets"));

        cmd.SetExpectedReader(rdr);
        object [,] rows = new object[1,1];
        rows[0, 0] = 1;
        rdr.SetRows(rows);

        AccessController1 access =
          new AccessController1("secrets", logger, conn);

        Assert.That(
          access.CanAccess("dave", "shhh"),
          Is.True
        );
        logger.Verify();
        conn.Verify();
        cmd.Verify();
    }