Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ before_install:
script:
- sleep 30
- docker exec "radius1" /bin/bash /usr/src/build/test-radius.sh
- docker exec "radius1" /bin/bash /usr/src/build/load-test-data.sh
- docker exec "radius1" /usr/bin/php /usr/src/build/seed-test-data.php --username=test@testing.com --password=testing123 --startdate="2016-01-01" --totalgb=10 --nasip="3.3.3.3" --quotagb=10 --quotadate="2016-01-01" --annivsday=1
- docker exec "radius1" /usr/bin/php /usr/src/build/test-seed.php --username=test@testing.com --password=testing123 --totalgb=10
- docker exec "radius1" radtest test@testing.com testing123 127.0.0.1 0 testing123
- radtest test@testing.com testing123 127.0.0.1 0 password

Expand Down
4 changes: 4 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@ COPY ./config/sql/mysql/dialup.conf /etc/freeradius/sql/mysql/dialup.conf
RUN ln -s /etc/freeradius/sites-available/sql /etc/freeradius/sites-enabled/sql

COPY ./src/load-test-data.sh /usr/src/build/load-test-data.sh
COPY ./src/seed-test-data.php /usr/src/build/seed-test-data.php
COPY ./src/test-seed.php /usr/src/build/test-seed.php
COPY ./sql/test-data.sql /usr/src/build/sql/test-data.sql
RUN chmod 755 /usr/src/build/load-test-data.sh
RUN chmod 755 /usr/src/build/seed-test-data.php
RUN chmod 755 /usr/src/build/test-seed.php
RUN chmod 755 /usr/local/bin/summarise_data.php
RUN ln -s /usr/local/bin/summarise_data.php /etc/cron.hourly/99.summarise_radius_data.php

Expand Down
176 changes: 176 additions & 0 deletions src/seed-test-data.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
#!/usr/bin/php
<?php

date_default_timezone_set('UTC');

// initialization
$quota = 0;
$quota_date = "";
$action = "shape";
$status = "normal";
$account_sessiontime = 1000;
$account_inputoctects = 5000;
$accout_outputoctects = 10000;
$today = date("Y-m-d H:i:s");

$longopts = array(
"username:",
"password:",
"startdate:",
"enddate::",
"totalgb:",
"nasip:",
"quotagb::",
"quotadate::",
"annivsday::"
);
$options = getopt("", $longopts);

// check mandatory options
if(!isset($options["username"]) || !isset($options["password"]) || !isset($options["startdate"]) || !isset($options["totalgb"]) || !isset($options["nasip"]))
die('Please input the required parameters. ex. --username=test@testing.com --password=testing123 --startdate="2016-01-01" --enddate="2016-02-01" --totalgb=10 --nasip="3.3.3.3" --quotagb=10 --quotadate="2016-01-01" --annivsday=1'.PHP_EOL);

//var_dump($options);

$username = $options["username"];
$password = $options["password"];
$start_date = date("Y-m-d H:i:s", strtotime($options["startdate"]));
$total_amount = $options["totalgb"] * 1073741824; // Giga to byte
$nasip = $options["nasip"];

if(isset($options["enddate"]))
$end_date = date("Y-m-d H:i:s", strtotime($options["enddate"]));
else
$end_date = $today;

if(isset($options["quotagb"]))
$quota = $options["quotagb"] * 1073741824; // Giga to byte

if(isset($options["quotadate"]))
$quota_date = date("Y-m-d H:i:s", strtotime($options["quotadate"]));

if(isset($options["annivsday"]))
$anniversary_day = $options["annivsday"];
else
$anniversary_day = date("d", strtotime($options["startdate"]));

$account_starttime = $start_date;
$account_endtime = $end_date;

//echo $today.PHP_EOL;
//echo $account_starttime.PHP_EOL;
//echo $account_endtime.PHP_EOL;

$db = new mysqli("mysql", "radius", "radius", "radius");

// update radcheck
$query = "INSERT into `radcheck` (`username`, `attribute`, `op`, `value`) values('$username', 'Cleartext-Password', ':=', '$password')";
echo $query.PHP_EOL;
$result = $db->query($query);
if (!$result) {
die($db->error);
}

// update userinfo
$query = "INSERT into `userinfo` (`username`) values('$username')";
echo $query.PHP_EOL;
$result = $db->query($query);
if (!$result) {
die($db->error);
}

// update user_billing_detail
$query = "INSERT into `user_billing_detail` (`username`, `anniversary_day`, `action`, `status`) values('$username', '$anniversary_day', '$action', '$status')";
echo $query.PHP_EOL;
$result = $db->query($query);
if (!$result) {
die($db->error);
}

// update user_quota
if($quota != 0 && $quota_date != "") {
$query = "INSERT into `user_quota` (`username`, `quota_date`, `quota`) values('$username', '$quota_date', '$quota')";
echo $query.PHP_EOL;
$result = $db->query($query);
if (!$result) {
die($db->error);
}
}

// diable triggers
$result = $db->query("SET @disable_triggers = 1");
if (!$result) {
die($db->error);
}

// update radacct session dummy row
$acctsessionid = bin2hex(openssl_random_pseudo_bytes(4));
$acctuniqueid = bin2hex(openssl_random_pseudo_bytes(8));
//echo "accsessionid: ".$acctsessionid.PHP_EOL;
//echo "acctuniqueid: ".$acctuniqueid.PHP_EOL;

$query = "INSERT INTO `radacct` (`acctsessionid`, `acctuniqueid`, `UserName`, `GroupName`, `realm`, `NASIPAddress`, `NASPortId`, `nasporttype`, `AcctStartTime`, `AcctStopTime`, `AcctSessionTime`, `acctauthentic`, `connectinfo_start`, `connectinfo_stop`, `AcctInputOctets`, `AcctOutputOctets`, `CalledStationId`, `CallingStationId`, `acctterminatecause`, `servicetype`, `framedprotocol`, `FramedIPAddress`, `acctstartdelay`, `acctstopdelay`, `xascendsessionsvrkey`)
values('$acctsessionid', '$acctuniqueid', '$username', '', '', '$nasip', '', 'ISDN', '$account_starttime', '$account_endtime', '$account_sessiontime', 'RADIUS', '155520000', '155520000', '$account_inputoctects', '$accout_outputoctects', '', 'foobar', 'Port-Error', 'Framed-User', 'PPP', '127.0.0.15', 0, 0, '')";
echo $query.PHP_EOL;
$result = $db->query($query);
if (!$result) {
die($db->error);
}

// add linear data to user_data table
$update= "INSERT into `user_data` (`username`, `datain`, `dataout`, `totaldata`, `data_hour`, `date`) values(?, ?, ?, ?, ?, ?)";
$stmt=$db->prepare($update);
if (!$stmt) {
die($db->error);
}
$stmt->bind_param("siiiis", $username, $datain, $dataout, $totaldata, $data_hour, $date);
$stmt->execute();

$start = strtotime($start_date);
$end = strtotime($end_date);
$pointer = strtotime($start_date);

$data_slice = floor($total_amount / (abs($end - $start) / 3600));
$datain = floor($data_slice * 0.4);
$dataout = $data_slice - $datain;
$totaldata = $data_slice;

//echo 'total: '.$total_amount.PHP_EOL;
//echo 'slice: '.$data_slice.PHP_EOL;

$restdata = $total_amount;
while ($restdata > $data_slice) {

$pointer = $pointer + 60*60;
$data_hour = date('H', $pointer);
$date = date('Y-m-d', $pointer);
echo $date.' '.$data_hour.PHP_EOL;
$stmt->execute();
if (!$stmt) {
die($db->error);
}

$restdata -= $data_slice;

}

// process the rest
$datain = $restdata;
$dataout = 0;
$totaldata = $restdata;
$pointer = $pointer + 60*60;
$data_hour = date('H', $pointer);
$date = date('Y-m-d', $pointer);
echo $date.' '.$data_hour.' '.$totaldata.' '.$datain.PHP_EOL;
$stmt->execute();
if (!$stmt) {
die($db->error);
}

// enable triggers
$result = $db->query("SET @disable_triggers = NULL");
if (!$result) {
die($db->error);
}

?>
76 changes: 76 additions & 0 deletions src/test-seed.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/usr/bin/php
<?php

$longopts = array(
"username:",
"password:",
"totalgb:"
);
$options = getopt("", $longopts);

var_dump($options);

// check mandatory options
if(!isset($options["username"]) || !isset($options["password"]) || !isset($options["totalgb"])) {
echo 'Please input the required parameters. ex. --username=test@testing.com --password=testig123 --totalgb=10' . PHP_EOL;
exit(1);
}

$username = $options["username"];
$password = $options["password"];
$total_amount = $options["totalgb"] * 1073741824; // Giga to byte

$db = new mysqli("mysql", "radius", "radius", "radius");

// update radcheck
$query = "SELECT * FROM `radcheck` WHERE username='$username' AND attribute='Cleartext-Password' AND value='$password'";
echo $query.PHP_EOL;
$result = $db->query($query);
if ($result->num_rows != 1) {
exit(1);
}

// update userinfo
$query = "SELECT * FROM `userinfo` WHERE username='$username'";
echo $query.PHP_EOL;
$result = $db->query($query);
if ($result->num_rows != 1) {
exit(1);
}

// update user_billing_detail
$query = "SELECT * FROM `user_billing_detail` WHERE username='$username'";
echo $query.PHP_EOL;
$result = $db->query($query);
if ($result->num_rows != 1) {
exit(1);
}

// update user_quota
$query = "SELECT * FROM `user_quota` WHERE username='$username'";
echo $query.PHP_EOL;
$result = $db->query($query);
if ($result->num_rows != 1) {
exit(1);
}

$query = "SELECT * FROM `radacct` WHERE username='$username'";
echo $query.PHP_EOL;
$result = $db->query($query);
if ($result->num_rows != 1) {
exit(1);
}

$query = "SELECT SUM(`totaldata`) as totalsum FROM `user_data` WHERE username='$username'";
echo $query.PHP_EOL;
$result = $db->query($query);
$row = $result->fetch_assoc();
echo $row['totalsum']." == ".$total_amount.PHP_EOL;
if($row['totalsum'] != $total_amount) {
exit(1);
}

echo "success!".PHP_EOL;
exit(0);

?>