Web Wispers 1.2.1 C++ Unit Test Coverage
Current view: top level - tests/wispers/group_session - GroupSessionDatabaseTest.cc (source / functions) Hit Total Coverage
Test: Web Wispers 1.2.1 C++ Unit Tests Lines: 281 281 100.0 %
Date: 2011-11-11 Functions: 30 31 96.8 %
Branches: 1496 2986 50.1 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * Copyright 2006-2009 Savarese Software Research Corporation
       3                 :            :  *
       4                 :            :  * Licensed under the Apache License, Version 2.0 (the "License");
       5                 :            :  * you may not use this file except in compliance with the License.
       6                 :            :  * You may obtain a copy of the License at
       7                 :            :  *
       8                 :            :  *     http://www.savarese.com/software/ApacheLicense-2.0
       9                 :            :  *
      10                 :            :  * Unless required by applicable law or agreed to in writing, software
      11                 :            :  * distributed under the License is distributed on an "AS IS" BASIS,
      12                 :            :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13                 :            :  * See the License for the specific language governing permissions and
      14                 :            :  * limitations under the License.
      15                 :            :  */
      16                 :            : 
      17                 :            : #include <tests/TestCommon.h>
      18                 :            : #include <ssrc/wispers/group_session/GroupSessionDatabase.h>
      19                 :            : #include <ssrc/wispers/group_session/protocol.h>
      20                 :            : #include <ssrc/wispers/lua/Properties.h>
      21                 :            : #include <ssrc/wispers/database/InitializeLibrary.h>
      22                 :            : 
      23                 :            : using namespace NS_SSRC_WSPR_GROUP_SESSION;
      24                 :            : using NS_SSRC_WSPR_LUA::load_properties;
      25                 :            : 
      26                 :            : __BEGIN_NS_SSRC_WSPR_GROUP_SESSION
      27                 :         18 : bool operator<(const GroupSession & gs1, const GroupSession & gs2) {
      28                 :         18 :   return (gs1.gsid < gs2.gsid);
      29                 :            : }
      30                 :            : __END_NS_SSRC_WSPR_GROUP_SESSION
      31                 :            : 
      32   [ +  -  +  -  :         48 : class GroupSessionDatabaseTest : public TestCase {
             -  +  +  - ]
      33                 :            : 
      34                 :            :   InitializeLibrary _init_lib;
      35                 :            :   boost::scoped_ptr<GroupSessionDatabase> db;
      36                 :            : 
      37                 :            : public:
      38                 :            : 
      39                 :            :   WISP_IMPORT(GroupSessionDatabase, MemberOperations);
      40                 :            : 
      41                 :         16 :   virtual void setUp() {
      42                 :         16 :     std::system(INITDB_COMMAND);
      43   [ +  -  +  -  :         16 :     db.reset(new GroupSessionDatabase(DB_FILE, *load_properties(PROP_FILE)));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
      44                 :         16 :   }
      45                 :            : 
      46                 :         16 :   virtual void tearDown() {
      47                 :         16 :     db.reset();
      48                 :         16 :   }
      49                 :            : 
      50                 :          3 :   void test_add_get_session() {
      51                 :          6 :     GroupSessionDatabase::GroupSessionOperations::find_result_type result;
      52                 :          3 :     sec_type created(TimeValue::now_seconds());
      53                 :          3 :     sec_type expires(created + 3600);
      54                 :            :     GroupSession session(5, created, expires,
      55   [ +  -  +  -  :          6 :                          "footype", "bargroup", "foo vs. bar", 0);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
      56                 :            : 
      57   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(db->group_session_ops.insert(session));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
      58   [ +  -  +  -  :          3 :     result = db->group_session_ops.find(4);
                   +  - ]
      59                 :            : 
      60   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(!result.first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
      61                 :            : 
      62   [ +  -  +  -  :          3 :     result = db->group_session_ops.find(5);
                   +  - ]
      63                 :            : 
      64   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
      65   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.gsid == 5);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
      66   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.get<0>() == 5);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
      67   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.column_name<0>() == "gsid");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
      68   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.column_name(0) == "gsid");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
      69   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.table_name() == "GroupSession");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
      70   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.created > 0);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
      71   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.expires == expires);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
      72   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.type == "footype");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
      73   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.group == "bargroup");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
      74   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(result.second.name == "foo vs. bar");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
      75                 :          3 :   }
      76                 :            : 
      77                 :            :   typedef uid_container::iterator uid_iterator;
      78                 :            : 
      79                 :            :   typedef bool (GroupSessionDatabase::* add_fun)(const uid_type,
      80                 :            :                                                  const gsid_type);
      81                 :            :   typedef unsigned int (GroupSessionDatabase::* remove_fun)(const uid_type);
      82                 :            :   typedef
      83                 :            :   unsigned int (GroupSessionDatabase::* get_fun)(uid_container &,
      84                 :            :                                                  const gsid_type) const;
      85                 :            :   typedef
      86                 :            :   unsigned int (GroupSessionDatabase::* addn_fun)(const uid_iterator &,
      87                 :            :                                                   const uid_iterator &,
      88                 :            :                                                   const gsid_type);
      89                 :            :   typedef
      90                 :            :   unsigned int (GroupSessionDatabase::* removen_fun)(const uid_iterator &,
      91                 :            :                                                      const uid_iterator &);
      92                 :            : 
      93                 :          5 :   void test_add_get_member_uids(MemberOperations & row_ops, get_fun get) {
      94                 :         10 :     uid_container results;
      95   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(row_ops.insert(MemberOperations::row_type(3, 31)));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
      96   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(((*db).*get)(results, 3) == 1);
          +  -  +  -  +  
          -  -  +  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
      97                 :            : 
      98   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(results.size() == 1);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
      99   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(results[0] == 31);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     100                 :            : 
     101   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(row_ops.insert(MemberOperations::row_type(3, 32)));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     102   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(row_ops.insert(MemberOperations::row_type(3, 33)));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     103                 :            : 
     104         [ +  - ]:          5 :     results.clear();
     105   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(((*db).*get)(results, 3) == 3);
          +  -  +  -  +  
          -  -  +  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     106                 :            : 
     107   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(results.size() == 3);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     108                 :            : 
     109   [ +  -  +  -  :          5 :     std::sort(results.begin(), results.end());
                   +  - ]
     110                 :            : 
     111   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(results[0] == 31);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     112   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(results[1] == 32);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     113   [ +  -  +  -  :          5 :     CPPUNIT_ASSERT(results[2] == 33);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     114                 :          5 :   }
     115                 :            : 
     116                 :          3 :   void test_add_get_participants() {
     117                 :          3 :     test_add_get_member_uids(db->participant_ops,
     118                 :          6 :                              &GroupSessionDatabase::get_member_uids<uid_container>);
     119                 :          3 :   }
     120                 :            : 
     121                 :          1 :   void test_add_get_observers() {
     122                 :          1 :     test_add_get_member_uids(db->observer_ops,
     123                 :          2 :                              &GroupSessionDatabase::get_member_uids<uid_container>);
     124                 :          1 :   }
     125                 :            : 
     126                 :          1 :   void test_get_member_uids() {
     127                 :          1 :     test_add_get_participants();
     128                 :            :     //test_add_get_observers();
     129                 :            : 
     130                 :          2 :     uid_container results;
     131         [ +  - ]:          1 :     db->get_member_uids(results, 3);
     132                 :            : 
     133   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(results.size() == 3);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     134                 :            : 
     135   [ +  -  +  -  :          1 :     std::sort(results.begin(), results.end());
                   +  - ]
     136                 :            : 
     137   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(results[0] == 31);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     138   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(results[1] == 32);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     139   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(results[2] == 33);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     140                 :            :     /*
     141                 :            :     uid_iterator it = results.begin();
     142                 :            :     ++it;
     143                 :            : 
     144                 :            :     CPPUNIT_ASSERT(db->participant_ops.insert(results.begin(), results.end()) == 2);
     145                 :            : 
     146                 :            :     it = results.begin();
     147                 :            :     ++it;
     148                 :            : 
     149                 :            :     CPPUNIT_ASSERT(db->observer_ops.insert(Member(results.begin(), it) == 1));
     150                 :            : 
     151                 :            :     results.clear();
     152                 :            :     db->get_member_uids(results, 3);
     153                 :            : 
     154                 :            :     CPPUNIT_ASSERT(results.size() == 3);
     155                 :            : 
     156                 :            :     std::sort(results.begin(), results.end());
     157                 :            : 
     158                 :            :     CPPUNIT_ASSERT(results[0] == 31);
     159                 :            :     CPPUNIT_ASSERT(results[1] == 32);
     160                 :            :     CPPUNIT_ASSERT(results[2] == 33);
     161                 :            :     */
     162                 :          1 :   }
     163                 :            : 
     164                 :          1 :   void test_remove_session() {
     165                 :          1 :     test_add_get_session();
     166                 :          1 :     test_add_get_participants();
     167                 :            : 
     168   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->group_session_ops.erase(5));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     169   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(0u, db->group_session_ops.erase(3));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     170   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(!db->group_session_ops.find(5).first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     171   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(!db->group_session_ops.find(3).first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     172                 :            : 
     173                 :          1 :     Member observers[3] = { Member(8, 81), Member(8, 82), Member(8, 83)};
     174                 :          1 :     Member participants[3] = { Member(8, 181), Member(8, 182), Member(8, 183)};
     175                 :            : 
     176                 :          1 :     sec_type created(TimeValue::now_seconds());
     177                 :          1 :     sec_type expires(created + 3600);
     178                 :            : 
     179                 :          1 :     db->group_session_ops.save(GroupSession(8, created, expires,
     180                 :            :                                             "footype", "bargroup",
     181   [ +  -  +  -  :          2 :                                             "foo vs. bar", 0));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     182                 :          1 :     db->participant_ops.insert(&participants[0], &participants[3]);
     183                 :          1 :     db->observer_ops.insert(&observers[0], &observers[3]);
     184                 :            : 
     185                 :          2 :     uid_container results;
     186                 :            : 
     187         [ +  - ]:          1 :     results.clear();
     188   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(6u, db->get_member_uids(results, 8));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     189   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(6u == results.size());
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     190         [ +  - ]:          1 :     results.clear();
     191   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->group_session_ops.erase(8));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     192   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(!db->group_session_ops.find(8).first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     193   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(0u, db->get_member_uids(results, 8));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     194   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(0u == results.size());
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     195                 :          1 :   }
     196                 :            : 
     197                 :          1 :   void test_get_participant_sessions() {
     198                 :          1 :     sec_type created(TimeValue::now_seconds());
     199                 :          1 :     sec_type expires(created + 3600);
     200                 :            :     GroupSession session(0, created, expires,
     201   [ +  -  +  -  :          2 :                          "footype", "bargroup", "foo vs. bar", 0);
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     202                 :            : 
     203         [ +  + ]:          5 :     for(unsigned int gsid = 22; gsid < 26; ++gsid) {
     204                 :          4 :       session.gsid = gsid;
     205         [ +  - ]:          4 :       db->group_session_ops.save(session);
     206                 :            :     }
     207                 :            : 
     208         [ +  - ]:          1 :     db->participant_ops.insert(Member(22, 84));
     209         [ +  - ]:          1 :     db->participant_ops.insert(Member(23, 84));
     210         [ +  - ]:          1 :     db->participant_ops.insert(Member(24, 84));
     211         [ +  - ]:          1 :     db->participant_ops.insert(Member(25, 84));
     212                 :            : 
     213   [ +  -  +  - ]:          2 :     group_session_container sessions;
     214                 :            : 
     215   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(0 == db->get_participant_sessions(sessions, 80));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     216   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions.size() == 0);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     217   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(4 == db->get_participant_sessions(sessions, 84));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     218   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions.size() == 4);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     219                 :            : 
     220   [ +  -  +  -  :          1 :     std::sort(sessions.begin(), sessions.end());
                   +  - ]
     221                 :            : 
     222   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].gsid == 22);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     223   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[1].gsid == 23);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     224   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[2].gsid == 24);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     225   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[3].gsid == 25);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     226                 :          1 :   }
     227                 :            : 
     228                 :          3 :   void test_find_expired_gsids() {
     229                 :          3 :     sec_type now(TimeValue::now_seconds());
     230   [ +  -  +  -  :          6 :     GroupSession session(1, now, now, "footype", "bargroup", "foo vs. bar", 0);
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     231         [ +  - ]:          3 :     db->group_session_ops.save(session);
     232                 :          3 :     session.gsid = 2;
     233         [ +  - ]:          3 :     db->group_session_ops.save(session);
     234                 :          3 :     session.gsid = 3;
     235         [ +  - ]:          3 :     db->group_session_ops.save(session);
     236                 :            : 
     237                 :          3 :     now+=3600;
     238                 :          3 :     session.gsid = 4;
     239                 :          3 :     session.created = session.expires = now;
     240         [ +  - ]:          3 :     db->group_session_ops.save(session);
     241                 :            : 
     242   [ +  -  +  - ]:          6 :     gsid_container gsids;
     243                 :            : 
     244   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(3 == db->find_expired_gsids(gsids, now - 1));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     245   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(3 == gsids.size());
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     246                 :            : 
     247   [ +  -  +  -  :          3 :     std::sort(gsids.begin(), gsids.end());
                   +  - ]
     248                 :            : 
     249   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(gsids[0] == 1);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     250   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(gsids[1] == 2);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     251   [ +  -  +  -  :          3 :     CPPUNIT_ASSERT(gsids[2] == 3);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     252                 :          3 :   }
     253                 :            : 
     254                 :          1 :   void test_get_sessions_by_type() {
     255                 :          1 :     sec_type now(TimeValue::now_seconds());
     256   [ +  -  +  -  :          2 :     GroupSession session(1, now, now, "footype", "bargroup", "foo vs. bar", 0);
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     257                 :            : 
     258         [ +  + ]:          4 :     for(unsigned int gsid = 1; gsid < 4; ++gsid) {
     259                 :          3 :       session.gsid = gsid;
     260         [ +  - ]:          3 :       db->group_session_ops.save(session);
     261                 :            :     }
     262                 :            : 
     263         [ +  - ]:          1 :     session.type = "bartype";
     264                 :            : 
     265         [ +  + ]:          6 :     for(unsigned int gsid = 5; gsid < 10; ++gsid) {
     266                 :          5 :       session.gsid = gsid;
     267         [ +  - ]:          5 :       db->group_session_ops.save(session);
     268                 :            :     }
     269                 :            : 
     270   [ +  -  +  - ]:          2 :     group_session_container sessions;
     271                 :            : 
     272   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(3 == db->get_sessions_by_type(sessions, "footype"));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     273                 :            : 
     274   [ +  -  +  -  :          1 :     std::sort(sessions.begin(), sessions.end());
                   +  - ]
     275                 :            : 
     276   [ +  -  +  + ]:          4 :     for(unsigned int i = 0; i < sessions.size(); ++i) {
     277   [ +  -  +  -  :          3 :       CPPUNIT_ASSERT(sessions[i].gsid == (i + 1));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     278                 :            :     }
     279                 :            : 
     280         [ +  - ]:          1 :     sessions.clear();
     281   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(5 == db->get_sessions_by_type(sessions, "bartype"));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     282                 :            : 
     283   [ +  -  +  -  :          1 :     std::sort(sessions.begin(), sessions.end());
                   +  - ]
     284                 :            : 
     285   [ +  -  +  + ]:          6 :     for(unsigned int i = 0; i < sessions.size(); ++i) {
     286   [ +  -  +  -  :          5 :       CPPUNIT_ASSERT(sessions[i].gsid == (i + 5));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     287                 :            :     }
     288                 :          1 :   }
     289                 :            : 
     290                 :          1 :   void test_remove_expired_sessions() {
     291                 :          1 :     test_find_expired_gsids();
     292                 :            : 
     293                 :          1 :     sec_type now(TimeValue::now_seconds() + 3600);
     294                 :            : 
     295   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(4u, db->remove_expired_sessions(now));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     296                 :            : 
     297                 :          2 :     gsid_container gsids;
     298                 :            : 
     299   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(0u, db->find_expired_gsids(gsids, now));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     300                 :            : 
     301         [ +  - ]:          1 :     test_find_expired_gsids();
     302                 :            : 
     303         [ +  - ]:          1 :     db->participant_ops.insert(Member(1,17));
     304         [ +  - ]:          1 :     db->participant_ops.insert(Member(2, 17));
     305         [ +  - ]:          1 :     db->participant_ops.insert(Member(4, 13));
     306         [ +  - ]:          1 :     db->observer_ops.insert(Member(1, 13));
     307         [ +  - ]:          1 :     db->observer_ops.insert(Member(2, 13));
     308         [ +  - ]:          1 :     db->observer_ops.insert(Member(4, 17));
     309                 :            : 
     310                 :          1 :     now = TimeValue::now_seconds();
     311                 :            : 
     312   [ +  -  +  - ]:          2 :     group_session_container sessions;
     313                 :            : 
     314   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(2u, db->get_participant_sessions(sessions, 17));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     315   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->get_observer_sessions(sessions, 17));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     316   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->get_participant_sessions(sessions, 13));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     317   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(2u, db->get_observer_sessions(sessions, 13));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     318   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(3u, db->remove_expired_sessions(now));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     319   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(0u, db->get_participant_sessions(sessions, 17));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     320   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->get_observer_sessions(sessions, 17));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     321   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->get_participant_sessions(sessions, 13));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     322   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(0u, db->get_observer_sessions(sessions, 13));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     323                 :            : 
     324   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(!db->group_session_ops.find(1).first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     325   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(!db->group_session_ops.find(2).first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     326   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(!db->group_session_ops.find(3).first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     327   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(db->group_session_ops.find(4).first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     328                 :          1 :   }
     329                 :            : 
     330                 :          2 :   void test_add_get_reservation() {
     331                 :          4 :     GroupSessionDatabase::ReservationOperations::find_result_type result;
     332                 :          2 :     sec_type created(TimeValue::now_seconds());
     333                 :          2 :     sec_type expires = created + 3600;
     334                 :            : 
     335                 :          2 :     db->reservation_ops.insert(Reservation(5, created, expires,
     336                 :            :                                            "footype", "bargroup",
     337   [ +  -  +  -  :          4 :                                            "foo vs. bar", 9, 28, 808));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     338   [ +  -  +  -  :          2 :     result = db->reservation_ops.find(4);
                   +  - ]
     339                 :            : 
     340   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(!result.first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     341                 :            : 
     342   [ +  -  +  -  :          2 :     result = db->reservation_ops.find(5);
                   +  - ]
     343                 :            : 
     344   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.first);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     345   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.gsid == 5);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     346   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.created == created);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     347   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.expires == expires);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     348   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.type == "footype");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     349   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.group == "bargroup");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     350   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.name == "foo vs. bar");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     351   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.max_observers == 9);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     352   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.creator_uid == 28);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     353   [ +  -  +  -  :          2 :     CPPUNIT_ASSERT(result.second.gs_lifetime == 808);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]
     354                 :          2 :   }
     355                 :            : 
     356                 :          1 :   void test_add_get_reservation_participants() {
     357                 :          1 :     test_add_get_member_uids(db->reservation_participant_ops,
     358                 :          2 :                          &GroupSessionDatabase::get_reservation_participants<uid_container>);
     359                 :            : 
     360                 :          1 :   }
     361                 :            : 
     362                 :          1 :   void test_find_sessions() {
     363                 :          1 :     sec_type created(TimeValue::now_seconds());
     364                 :          1 :     sec_type expires(created + 3600);
     365                 :            :     GroupSession session(5, created, expires,
     366   [ +  -  +  -  :          2 :                          "footype", "bargroup", "foo vs. bar", 2);
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     367                 :            : 
     368   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(db->group_session_ops.insert(session));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     369                 :            : 
     370   [ +  -  +  - ]:          2 :     group_session_container sessions;
     371                 :            : 
     372         [ +  - ]:          1 :     db->find_sessions(sessions);
     373                 :            : 
     374   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions.size() == 1);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     375                 :            : 
     376   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].gsid == 5);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     377   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].get<0>() == 5);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     378   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].column_name<0>() == "gsid");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                      - ]
     379   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].column_name(0) == "gsid");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                      - ]
     380   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].table_name() == "GroupSession");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                      - ]
     381   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].created > 0);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     382   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].expires == expires);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     383   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].type == "footype");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     384   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].group == "bargroup");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     385   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].name == "foo vs. bar");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     386   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(sessions[0].max_observers == 2);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     387                 :          1 :   }
     388                 :            : 
     389                 :          1 :   void test_is_member() {
     390                 :          1 :     const uid_type uid = 31;
     391                 :          1 :     const gsid_type gsid = 3;
     392                 :            : 
     393   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(false, db->is_member(uid, gsid));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     394   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(db->observer_ops.insert(Member(gsid, uid)));
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     395   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(true, db->is_member(uid, gsid));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     396                 :          1 :   }
     397                 :            : 
     398                 :          1 :   void test_find_members_for_uid() {
     399                 :          1 :     sec_type created(TimeValue::now_seconds());
     400                 :          1 :     sec_type expires(created + 3600);
     401                 :            : 
     402                 :          1 :     db->group_session_ops.save(GroupSession(8, created, expires,
     403                 :            :                                             "footype", "bargroup",
     404   [ +  -  +  -  :          2 :                                             "foo vs. bar", 0));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     405                 :          1 :     db->group_session_ops.save(GroupSession(9, created, expires,
     406                 :            :                                             "footype", "bargroup",
     407   [ +  -  +  -  :          2 :                                             "foo vs. bar", 0));
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     408                 :            : 
     409                 :          1 :     db->participant_ops.insert(Member(8, 22));
     410                 :          1 :     db->participant_ops.insert(Member(8, 24));
     411                 :          1 :     db->observer_ops.insert(Member(8, 23));
     412                 :          1 :     db->observer_ops.insert(Member(9, 22));
     413                 :          1 :     db->observer_ops.insert(Member(9, 23));
     414                 :            : 
     415                 :          2 :     uid_container results;
     416                 :            : 
     417   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(2u, db->find_members_for_uid(results, 22));
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     418   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(2u == results.size());
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     419   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(results[0] == 23);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     420   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT(results[1] == 24);
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
             -  +  -  +  
                      - ]
     421                 :          1 :   }
     422                 :            : 
     423                 :          1 :   void test_count_sessions() {
     424   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(0u, db->count_sessions());
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     425                 :          1 :     test_add_get_session();
     426   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->count_sessions());
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     427                 :          1 :   }
     428                 :            : 
     429                 :          1 :   void test_count_reservations() {
     430   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(0u, db->count_reservations());
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     431                 :          1 :     test_add_get_reservation();
     432   [ +  -  +  -  :          1 :     CPPUNIT_ASSERT_EQUAL(1u, db->count_reservations());
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     433                 :          1 :   }
     434                 :            : 
     435   [ +  -  +  -  :          4 :   CPPUNIT_TEST_SUITE(GroupSessionDatabaseTest);
             +  -  #  # ]
     436   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_add_get_session);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     437   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_add_get_participants);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     438   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_add_get_observers);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     439   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_get_member_uids);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     440   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_remove_session);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     441   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_get_participant_sessions);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     442   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_find_expired_gsids);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     443   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_get_sessions_by_type);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     444   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_remove_expired_sessions);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     445   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_add_get_reservation);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     446   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_add_get_reservation_participants);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     447   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_find_sessions);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     448   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_is_member);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     449   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_find_members_for_uid);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     450   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_count_sessions);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     451   [ +  -  +  -  :          1 :   CPPUNIT_TEST(test_count_reservations);
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     452   [ +  -  +  -  :          2 :   CPPUNIT_TEST_SUITE_END();
          +  -  +  -  +  
                -  +  - ]
     453                 :            : };
     454                 :            : 
     455   [ -  +  #  # ]:          1 : CPPUNIT_TEST_SUITE_REGISTRATION(GroupSessionDatabaseTest);
     456   [ +  -  +  -  :          4 : WISP_TEST_MAIN()
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                -  +  - ]