]> WPIA git - cassiopeia.git/blob - test/src/sql.cpp
add: exclude sql testcase if there is no config for it
[cassiopeia.git] / test / src / sql.cpp
1 #include <boost/test/unit_test.hpp>
2 #include <memory.h>
3 #include <db/mysql.h>
4 #include <config.h>
5
6 #include <fstream>
7
8 extern std::string sqlHost, sqlUser, sqlPass, sqlDB;
9
10 BOOST_AUTO_TEST_SUITE( TestSQL )
11
12 BOOST_AUTO_TEST_CASE( testSQL ) {
13     std::ifstream conf("config.txt");
14     if( !conf ) {
15         BOOST_WARN_MESSAGE( 0, "Config file is missing. Exiting." );
16         return;
17     }
18     BOOST_REQUIRE( parseConfig("config.txt") == 0 );
19     std::shared_ptr<MySQLJobProvider> jp( new MySQLJobProvider( sqlHost, sqlUser, sqlPass, sqlDB ) );
20     BOOST_REQUIRE( jp->query( "TRUNCATE TABLE profiles" ).first == 0 );
21     BOOST_REQUIRE( jp->query( "TRUNCATE TABLE certs" ).first == 0 );
22     BOOST_REQUIRE( jp->query( "TRUNCATE TABLE certAvas" ).first == 0 );
23     BOOST_REQUIRE( jp->query( "TRUNCATE TABLE subjectAlternativeNames" ).first == 0 );
24     BOOST_REQUIRE( jp->query( "TRUNCATE TABLE jobs" ).first == 0 );
25     BOOST_REQUIRE( jp->query( "INSERT INTO profiles SET id='1', keyname='assured', keyUsage='', extendedKeyUsage='', name='assured'" ).first == 0 );
26     BOOST_REQUIRE( jp->query( "INSERT INTO jobs SET task='sign', targetId='1'" ).first == 0 );
27
28     std::shared_ptr<Job> job = jp->fetchJob();
29     BOOST_REQUIRE( job );
30     jp->failJob(job);
31     BOOST_REQUIRE_EQUAL( job->target, "1" );
32     BOOST_REQUIRE_EQUAL( job->task, "sign" );
33     job = jp->fetchJob();
34     BOOST_REQUIRE( job );
35     std::shared_ptr<TBSCertificate> cert = jp->fetchTBSCert(job);
36     BOOST_REQUIRE( !cert );
37     BOOST_REQUIRE( jp->query( "INSERT INTO certs SET csr_type='CSR', id='1', profile='1'" ).first == 0 );
38     BOOST_REQUIRE( jp->query( "INSERT INTO subjectAlternativeNames SET certId='1', contents='example.org', type='DNS'" ).first == 0 );
39     BOOST_REQUIRE( jp->query( "INSERT INTO certAvas SET certid='1', name='CN', value='example.org'" ).first == 0 );
40     cert = jp->fetchTBSCert(job);
41     BOOST_REQUIRE( cert );
42
43     std::shared_ptr<SignedCertificate> fcert( new SignedCertificate() );
44     fcert->certificate="CERT";
45     fcert->serial="1234";
46     fcert->crt_name="crt.name.crt";
47     fcert->ca_name="assured";
48     jp->writeBack( job, fcert );
49     jp->finishJob( job );
50     BOOST_REQUIRE( !jp->fetchJob() );
51     BOOST_REQUIRE( jp->query( "INSERT INTO jobs SET task='revoke', targetId='1'" ).first == 0 );
52     job = jp->fetchJob();
53     BOOST_REQUIRE_EQUAL( job->target, "1" );
54     BOOST_REQUIRE_EQUAL( job->task, "revoke" );
55     std::pair<std::string, std::string> revocationInfo = jp->getRevocationInfo( job );
56     BOOST_REQUIRE_EQUAL( revocationInfo.first, "1234");
57     BOOST_REQUIRE_EQUAL( revocationInfo.second, "assured");
58     jp->writeBackRevocation( job, "2000-01-01 01:01:01" );
59     jp->finishJob( job );
60 }
61
62 BOOST_AUTO_TEST_CASE( testSQLDisconnected ) {
63     std::ifstream conf("config.txt");
64     if( !conf ) {
65         BOOST_WARN_MESSAGE( 0, "Config file is missing. Exiting." );
66         return;
67     }
68     //if(1) return;
69     //BOOST_REQUIRE( parseConfig("config.txt") == 0 );
70     std::shared_ptr<MySQLJobProvider> jp( new MySQLJobProvider( sqlHost, sqlUser, sqlPass, sqlDB ) );
71     jp->disconnect();
72     jp->disconnect();
73     BOOST_REQUIRE( jp->query("SELECT 1").first);
74     BOOST_REQUIRE_THROW( jp->escape_string("uia"), const char * );
75     BOOST_REQUIRE_THROW( jp->finishJob(std::shared_ptr<Job>()), const char * );
76     BOOST_REQUIRE_THROW( jp->failJob(std::shared_ptr<Job>()), const char * );
77 }
78
79 BOOST_AUTO_TEST_SUITE_END()