Patchwork [1/4] sms_test: Test that gsm340_scts(gsm340_gen_scts(time) == time

login
register
mail settings
Submitter Daniel Willmann
Date March 26, 2014, 10:30 p.m.
Message ID <64c11ccd40489136537a1d3e804c18e0d66440f4.1395872056.git.daniel@totalueberwachung.de>
Download mbox | patch
Permalink /patch/334122/
State New
Headers show

Comments

Daniel Willmann - March 26, 2014, 10:30 p.m.
gsm340_scts() needs to be the inverse of gsm340_gen_scts()
Test different timezones and iterate through a whole year (2013) in 30
min steps.

Record the current test result
---
 tests/sms/sms_test.c  | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/sms/sms_test.ok | 20 +++++++++++++++++
 2 files changed, 79 insertions(+)
Daniel Willmann - March 27, 2014, 8:18 p.m.
Hi Alexander,

On Thu, 2014-03-27 at 09:21, Alexander Chemeris wrote:
> On Thu, Mar 27, 2014 at 2:30 AM, Daniel Willmann <dwillmann@sysmocom.de> wrote:
> > +Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ UTC
> > +Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ Europe/London
> > +1364691600 -> 31301310000000 -> 1364695200
> > +Timezone Europe/London failed at ts 1364691600
> 
> A quick question - why does it says "failed" here?
> 
> If it's ok, than we should change the wording of the message, I think.
> If it's not ok, we should not add this to "sms_test.ok". Right now
> it's confusing.

you're right. I was trying to first record the status quo so you can see
the behaviour changes as the issue is fixed.

Holger was quite fond of this in the recent lapdm fixes, but it probably
makes less sense here. Holger, any preferences how I should handle this?
Move the test to the end, have a failing test, ..?


Regard,
Daniel
Holger Freyther - March 28, 2014, 8:16 a.m.
On Thu, Mar 27, 2014 at 09:18:25PM +0100, Daniel Willmann wrote:

> you're right. I was trying to first record the status quo so you can see
> the behaviour changes as the issue is fixed.
> 
> Holger was quite fond of this in the recent lapdm fixes, but it probably
> makes less sense here. Holger, any preferences how I should handle this?
> Move the test to the end, have a failing test, ..?

The question is if you want to have a known issue in new code or not. What
is the impact for the end-user/NITB? How will this fail? Is this a step
backward compared to the extensions by BSD/Linux?

holger

Patch

diff --git a/tests/sms/sms_test.c b/tests/sms/sms_test.c
index cdd4158..8b19760 100644
--- a/tests/sms/sms_test.c
+++ b/tests/sms/sms_test.c
@@ -268,6 +268,64 @@  static void test_gen_oa(void)
 	printf("Result: len(%d) data(%s)\n", len, osmo_hexdump(oa, len));
 }
 
+const char *tz_list[] = {
+	"UTC",
+	"Europe/London",
+	"Europe/Berlin",
+	"Europe/Athens",
+	"Europe/Moscow",
+	"Canada/Central",
+	"America/New_York",
+	"America/Los_Angeles",
+	NULL
+};
+
+static int test_scts_id_one_tz(void)
+{
+	uint8_t scts[7];
+	time_t ts, ts_res, start_ts, end_ts;
+
+	/* 2013-01-01 00:00:00 - 2014-01-01 01:00:00 increment in 30min steps */
+	start_ts = 1356998400;
+	end_ts = 1388538000;
+	for (ts = start_ts; ts <= end_ts; ts += 1800) {
+		memset(scts, 0, sizeof(scts));
+		gsm340_gen_scts(scts, ts);
+		ts_res = gsm340_scts(scts);
+
+		if (ts_res != ts) {
+			printf("%li -> %s -> %li\n", ts,
+				osmo_hexdump_nospc(scts, sizeof(scts)), ts_res);
+			return ts;
+		}
+	}
+	return 0;
+}
+
+static void test_scts_id(void)
+{
+	int i;
+	time_t ts;
+	const char *tz;
+	char *old_tz = getenv("TZ");
+
+	for (i = 0; ;i++) {
+		tz = tz_list[i];
+		if (!tz)
+			break;
+
+		printf("Testing gsm340_scts(gsm340_gen_scts(ts)) == ts "
+				"for TZ %s\n", tz);
+		setenv("TZ", tz, 1);
+		tzset();
+
+		ts = test_scts_id_one_tz();
+		if (ts)
+			printf("Timezone %s failed at ts %li\n", tz, ts);
+	}
+	setenv("TZ", old_tz, 1);
+}
+
 int main(int argc, char** argv)
 {
 	printf("SMS testing\n");
@@ -414,6 +472,7 @@  int main(int argc, char** argv)
 
 	test_octet_return();
 	test_gen_oa();
+	test_scts_id();
 
 	printf("OK\n");
 	return 0;
diff --git a/tests/sms/sms_test.ok b/tests/sms/sms_test.ok
index fa536ea..a3d816c 100644
--- a/tests/sms/sms_test.ok
+++ b/tests/sms/sms_test.ok
@@ -26,4 +26,24 @@  Result: len(12) data(14 a1 21 43 65 87 09 21 43 65 87 19 )
 Result: len(2) data(00 91 )
 Result: len(9) data(0e d0 4f 78 d9 2d 9c 0e 01 )
 Result: len(12) data(14 d0 4f 78 d9 2d 9c 0e c3 e2 31 19 )
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ UTC
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ Europe/London
+1364691600 -> 31301310000000 -> 1364695200
+Timezone Europe/London failed at ts 1364691600
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ Europe/Berlin
+1364695200 -> 31301320000000 -> 1364698800
+Timezone Europe/Berlin failed at ts 1364695200
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ Europe/Athens
+1364698800 -> 31301330000000 -> 1364702400
+Timezone Europe/Athens failed at ts 1364698800
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ Europe/Moscow
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ Canada/Central
+1362880800 -> 31300120000000 -> 1362884400
+Timezone Canada/Central failed at ts 1362880800
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ America/New_York
+1362880800 -> 31300120000000 -> 1362884400
+Timezone America/New_York failed at ts 1362880800
+Testing gsm340_scts(gsm340_gen_scts(ts)) == ts for TZ America/Los_Angeles
+1362880800 -> 31300120000000 -> 1362884400
+Timezone America/Los_Angeles failed at ts 1362880800
 OK