Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
M
Mock Turtle
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Mock Turtle
Commits
2c425e43
Commit
2c425e43
authored
Apr 30, 2018
by
Federico Vaga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tests: improve testing
Signed-off-by:
Federico Vaga
<
federico.vaga@cern.ch
>
parent
4c6d6f25
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
183 additions
and
210 deletions
+183
-210
conftest.py
tests/conftest.py
+11
-3
Makefile
tests/firmware/Makefile
+1
-2
hmq-async-send.c
tests/firmware/hmq-async-send/hmq-async-send.c
+23
-20
Kconfig
tests/firmware/hmq-sync/Kconfig
+0
-19
mt_defconfig
tests/firmware/hmq-sync/configs/mt_defconfig
+0
-26
hmq-sync.c
tests/firmware/hmq-sync/hmq-sync.c
+0
-58
Makefile
tests/firmware/rt-frm-ping/Makefile
+0
-9
rt-frm-ping.c
tests/firmware/rt-frm-ping/rt-frm-ping.c
+0
-33
Kconfig
tests/firmware/rt-frm/Kconfig
+0
-0
Makefile
tests/firmware/rt-frm/Makefile
+2
-2
mt_defconfig
tests/firmware/rt-frm/configs/mt_defconfig
+2
-2
rt-frm.c
tests/firmware/rt-frm/rt-frm.c
+94
-0
test_hmq.py
tests/test_hmq.py
+16
-12
test_rt_frm.py
tests/test_rt_frm.py
+34
-24
No files found.
tests/conftest.py
View file @
2c425e43
...
...
@@ -63,14 +63,22 @@ def trtl_msg(request):
sequence. These two values in the last message are equal
"""
msg_list
=
[]
for
val
in
range
(
1
,
request
.
param
):
for
val
in
range
(
request
.
param
):
msg
=
PyMockTurtle
.
TrtlMessage
()
msg
.
header
.
len
=
2
msg
.
payload
[
0
]
=
val
msg
.
payload
[
1
]
=
request
.
param
-
1
msg
.
payload
[
0
]
=
val
+
1
msg
.
payload
[
1
]
=
request
.
param
msg_list
.
append
(
msg
)
return
msg_list
@
pytest
.
fixture
(
scope
=
"module"
)
def
trtl_version_exp
():
v
=
PyMockTurtle
.
TrtlFirmwareVersion
()
v
.
fw_id
=
0xBADC0FFE
v
.
fw_version
=
0x1
v
.
git_version
=
0x12345678
return
v
# @pytest.fixture(scope="module")
# def trtl_hmq():
...
...
tests/firmware/Makefile
View file @
2c425e43
...
...
@@ -7,9 +7,8 @@ DIRS += config_rom
DIRS
+=
sim-verif
DIRS
+=
hmq-async-recv
DIRS
+=
hmq-async-send
DIRS
+=
hmq-sync
DIRS
+=
hmq-purge
DIRS
+=
rt-frm
-ping
DIRS
+=
rt-frm
TRTL
?=
../..
...
...
tests/firmware/hmq-async-send/hmq-async-send.c
View file @
2c425e43
...
...
@@ -9,23 +9,23 @@ struct payload {
int
main
()
{
int
cpu
,
hmq
,
count
;
int
cpu
,
hmq
,
count
,
run
;
const
struct
trtl_config_rom
*
cfgrom
=
trtl_config_rom_get
();
struct
trtl_fw_msg
msg
;
struct
trtl_fw_msg
msg
,
msg_s
;
struct
payload
*
p
;
uint32_t
status
;
pr_debug
(
"
ASYNC MESSAGES SEND
\r\n
"
);
pr_debug
(
"
TEST for: async send, sync
\r\n
"
);
cpu
=
trtl_get_core_id
();
for
(
hmq
=
0
;
hmq
<
cfgrom
->
n_hmq
[
cpu
];
++
hmq
)
{
mq_map_in_message
(
TRTL_HMQ
,
hmq
,
&
msg
);
mq_map_out_message
(
TRTL_HMQ
,
hmq
,
&
msg_s
);
p
=
msg
.
payload
;
count
=
1
;
while
(
1
)
{
/* Wait incoming message */
status
=
mq_poll_in_wait
(
TRTL_HMQ
,
1
<<
hmq
,
1000
);
for
(
count
=
1
,
run
=
1
;
run
;
++
count
)
{
/* Wait incoming message - 100ms timeout */
status
=
mq_poll_in_wait
(
TRTL_HMQ
,
1
<<
hmq
,
100000
);
if
(
!
status
)
{
pr_error
(
"
\t
NO MESSAGE PENDING h:%d, cnt:0x%x
\r\n
"
,
hmq
,
count
);
...
...
@@ -36,28 +36,31 @@ int main()
hmq
,
msg
.
header
->
len
,
p
->
idx
,
p
->
max
,
count
);
/* validate message */
if
(
msg
.
header
->
len
!=
2
||
p
->
idx
!=
count
)
{
pr_error
(
"
\t
h: %d, l:%d, d[0]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
msg
.
header
->
len
,
p
->
idx
,
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
if
(
p
->
max
<
count
)
{
pr_error
(
"
\t
h:%d, l:%d d[1]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
msg
.
header
->
len
,
p
->
max
,
count
);
if
(
msg
.
header
->
len
!=
2
||
p
->
idx
!=
count
||
p
->
max
<
count
)
{
pr_error
(
"
\t
h:%d, len:%d, {idx: %ld, max: %ld}, cnt:0x%x
\r\n
"
,
hmq
,
msg
.
header
->
len
,
p
->
idx
,
p
->
max
,
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
/* stop on the last one */
if
(
p
->
idx
==
p
->
max
)
{
mq_discard
(
TRTL_HMQ
,
hmq
);
break
;
if
(
p
->
idx
==
p
->
max
)
run
=
0
;
/* stop the loop */
if
(
msg
.
header
->
flags
&
TRTL_HMQ_HEADER_FLAG_SYNC
)
{
/* For sync answer test */
pr_debug
(
"SEND MESSAGES SYNC ANSWER
\r\n
"
);
mq_claim
(
TRTL_HMQ
,
hmq
);
memcpy
(
msg_s
.
header
,
msg
.
header
,
sizeof
(
struct
trtl_hmq_header
));
msg_s
.
header
->
flags
&=
~
TRTL_HMQ_HEADER_FLAG_SYNC
;
msg_s
.
header
->
flags
|=
TRTL_HMQ_HEADER_FLAG_ACK
;
memcpy
(
msg_s
.
payload
,
msg
.
payload
,
msg
.
header
->
len
*
4
);
mq_send
(
TRTL_HMQ
,
hmq
);
}
/* goto the next one */
mq_discard
(
TRTL_HMQ
,
hmq
);
count
++
;
}
}
...
...
tests/firmware/hmq-sync/Kconfig
deleted
100644 → 0
View file @
4c6d6f25
mainmenu "hmq_sync test configuration"
comment "Project specific configuration"
config FPGA_APPLICATION_ID
int "FPGA application ID"
default 0
help
Help text
config RT_APPLICATION_ID
int "RT application ID"
default 0
help
Help text
# include Mock Turtle's Kconfig
source "Kconfig.mt"
tests/firmware/hmq-sync/configs/mt_defconfig
deleted
100644 → 0
View file @
4c6d6f25
#
# Automatically generated file; DO NOT EDIT.
# config_rom test configuration
#
#
# Project specific configuration
#
CONFIG_FPGA_APPLICATION_ID=0
CONFIG_RT_APPLICATION_ID=0
#
# Mock Turtle configuration
#
#
# Mock Turtle framework configuration
#
# CONFIG_MOCKTURTLE_FRAMEWORK_ENABLE is not set
#
# Mock Turtle library configuration
#
CONFIG_MOCKTURTLE_LIBRARY_PRINT_ENABLE=y
# CONFIG_MOCKTURTLE_LIBRARY_PRINT_DEBUG_ENABLE is not set
CONFIG_MOCKTURTLE_LIBRARY_PRINT_ERROR_ENABLE=y
tests/firmware/hmq-sync/hmq-sync.c
deleted
100644 → 0
View file @
4c6d6f25
#include <mockturtle-rt.h>
int
main
()
{
int
cpu
,
hmq
,
count
;
const
struct
trtl_config_rom
*
cfgrom
=
trtl_config_rom_get
();
volatile
uint32_t
*
msg_r
,
*
msg_s
;
volatile
struct
trtl_hmq_header
*
hdr_r
,
*
hdr_s
;
uint32_t
status
;
pr_debug
(
"SYNC MESSAGES
\r\n
"
);
cpu
=
trtl_get_core_id
();
for
(
hmq
=
0
;
hmq
<
cfgrom
->
n_hmq
[
cpu
];
++
hmq
)
mq_purge
(
TRTL_HMQ
,
hmq
);
for
(
hmq
=
0
;
hmq
<
cfgrom
->
n_hmq
[
cpu
];
++
hmq
)
{
hdr_r
=
mq_map_in_header
(
TRTL_HMQ
,
hmq
);
msg_r
=
mq_map_in_buffer
(
TRTL_HMQ
,
hmq
);
hdr_s
=
mq_map_out_header
(
TRTL_HMQ
,
hmq
);
msg_s
=
mq_map_out_buffer
(
TRTL_HMQ
,
hmq
);
count
=
1
;
while
(
1
)
{
/* Wait incoming message */
status
=
mq_poll_in_wait
(
TRTL_HMQ
,
1
<<
hmq
,
1000
);
if
(
!
status
)
{
pr_error
(
"
\t
NO MESSAGE PENDING h:%d, cnt:0x%x
\r\n
"
,
hmq
,
count
);
return
-
1
;
}
/* validate message */
if
(
hdr_r
->
len
!=
2
||
msg_r
[
0
]
!=
count
)
{
pr_error
(
"
\t
h: %d, l:%d, d[0]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
hdr_r
->
len
,
msg_r
[
0
],
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
if
(
msg_r
[
1
]
<
count
)
{
pr_error
(
"
\t
h:%d, l:%d d[1]:0x%lx, cnt:0x%x
\r\n
"
,
hmq
,
hdr_r
->
len
,
msg_r
[
1
],
count
);
mq_discard
(
TRTL_HMQ
,
hmq
);
return
-
1
;
}
mq_claim
(
TRTL_HMQ
,
hmq
);
memcpy
(
hdr_s
,
hdr_r
,
sizeof
(
struct
trtl_hmq_header
));
memcpy
(
msg_s
,
msg_r
,
(
hdr_r
->
len
+
1
)
*
4
);
mq_discard
(
TRTL_HMQ
,
hmq
);
mq_send
(
TRTL_HMQ
,
hmq
);
count
++
;
}
}
return
0
;
}
tests/firmware/rt-frm-ping/Makefile
deleted
100755 → 0
View file @
4c6d6f25
OBJS
=
rt-frm-ping.o
OBJS
+=
# add other object files that you need
OUTPUT
=
fw-rt-frm-ping
TRTL
?=
../../../
TRTL_SW
=
$(TRTL)
/software
CFLAGS_OPT
=
-O0
# disable optimization
include
$(TRTL_SW)/firmware/Makefile
tests/firmware/rt-frm-ping/rt-frm-ping.c
deleted
100644 → 0
View file @
4c6d6f25
/*
* Copyright (C)
* Author:
* License:
*/
#include <mockturtle-framework.h>
/**
* Well, the main :)
*/
static
int
ping_main
()
{
while
(
1
)
{
/* Handle all messages incoming from HMQ 0 as actions */
trtl_fw_mq_action_dispatch
(
TRTL_HMQ
,
0
);
}
return
0
;
}
struct
trtl_fw_application
app
=
{
.
name
=
"hellofrm"
,
.
version
=
{
.
rt_id
=
CONFIG_RT_APPLICATION_ID
,
.
rt_version
=
RT_VERSION
(
0
,
1
),
.
git_version
=
GIT_VERSION
},
.
main
=
ping_main
,
};
tests/firmware/rt-frm
-ping
/Kconfig
→
tests/firmware/rt-frm/Kconfig
View file @
2c425e43
File moved
tests/firmware/
hmq-sync
/Makefile
→
tests/firmware/
rt-frm
/Makefile
100644 → 100755
View file @
2c425e43
OBJS
=
hmq-sync
.o
OBJS
=
rt-frm
.o
OBJS
+=
# add other object files that you need
OUTPUT
=
fw-
hmq-sync
OUTPUT
=
fw-
rt-frm
TRTL
?=
../../../
TRTL_SW
=
$(TRTL)
/software
...
...
tests/firmware/rt-frm
-ping
/configs/mt_defconfig
→
tests/firmware/rt-frm/configs/mt_defconfig
View file @
2c425e43
...
...
@@ -18,8 +18,8 @@ CONFIG_RT_APPLICATION_ID=0
#
CONFIG_MOCKTURTLE_FRAMEWORK_ENABLE=y
CONFIG_MOCKTURTLE_FRAMEWORK_DEBUG_ENABLE=y
# CONFIG_MOCKTURTLE_FRAMEWORK_VARIABLE_ENABLE is not set
# CONFIG_MOCKTURTLE_FRAMEWORK_BUFFER_ENABLE is not set
CONFIG_MOCKTURTLE_FRAMEWORK_VARIABLE_ENABLE=y
CONFIG_MOCKTURTLE_FRAMEWORK_BUFFER_ENABLE=y
#
# Mock Turtle library configuration
...
...
tests/firmware/rt-frm/rt-frm.c
0 → 100644
View file @
2c425e43
/*
* Copyright (C)
* Author:
* License:
*/
#include <mockturtle-framework.h>
#define BUF1_LEN 4
#define BUF2_LEN 5
static
int
var1
;
static
int
var2
;
static
uint32_t
buf1
[
BUF1_LEN
];
static
uint32_t
buf2
[
BUF2_LEN
];
struct
trtl_fw_variable
variables
[]
=
{
[
0
]
=
{
.
addr
=
(
void
*
)
&
var1
,
.
mask
=
0xFFFFFFFF
,
.
offset
=
0
,
.
flags
=
0
,
},
[
1
]
=
{
.
addr
=
(
void
*
)
&
var2
,
.
mask
=
0xFFFFFFFF
,
.
offset
=
0
,
.
flags
=
0
,
},
};
struct
trtl_fw_buffer
buffers
[]
=
{
[
0
]
=
{
.
buf
=
buf1
,
.
len
=
BUF1_LEN
*
4
,
},
[
1
]
=
{
.
buf
=
buf2
,
.
len
=
BUF2_LEN
*
4
,
},
};
static
int
frm_init
()
{
int
i
;
var1
=
0x55AA55AA
;
var2
=
0xFEDE0786
;
for
(
i
=
0
;
i
<
BUF1_LEN
;
++
i
)
buf1
[
i
]
=
i
;
for
(
i
=
0
;
i
<
BUF2_LEN
;
++
i
)
buf2
[
i
]
=
i
*
2
;
return
0
;
}
/**
* Well, the main :)
*/
static
int
frm_main
()
{
while
(
1
)
{
/* Handle all messages incoming from HMQ 0 as actions */
trtl_fw_mq_action_dispatch
(
TRTL_HMQ
,
0
);
}
return
0
;
}
struct
trtl_fw_application
app
=
{
.
name
=
"testfrm"
,
.
version
=
{
.
rt_id
=
0xBADC0FFE
,
.
rt_version
=
RT_VERSION
(
0
,
1
),
.
git_version
=
0x12345678
,
},
.
fpga_id_compat_n
=
0
,
.
variables
=
variables
,
.
n_variables
=
ARRAY_SIZE
(
variables
),
.
buffers
=
buffers
,
.
n_buffers
=
ARRAY_SIZE
(
buffers
),
.
init
=
frm_init
,
.
main
=
frm_main
,
};
tests/test_hmq.py
View file @
2c425e43
...
...
@@ -77,7 +77,7 @@ class TestHmq(object):
sa
=
hmq
.
get_stats
()
assert
sb
[
"message_sent"
]
+
1
==
sa
[
"message_sent"
]
time
.
sleep
(
0.
5
)
time
.
sleep
(
0.
1
)
assert
ser
.
in_waiting
>=
len
(
self
.
confirm
)
assert
self
.
confirm
==
ser
.
read
(
ser
.
in_waiting
)
.
decode
()
...
...
@@ -113,22 +113,26 @@ class TestHmq(object):
sa
=
hmq
.
get_stats
()
assert
sb
[
hmq
][
"message_received"
]
+
tot
==
sa
[
"message_received"
]
def
test_sync
(
self
,
trtl_cpu
,
trtl_msg
,
trtl_binary_hmq_
sync
):
def
test_sync
(
self
,
trtl_cpu
,
trtl_msg
,
trtl_binary_hmq_
async_send
):
"""It sends the test messages on all available HMQ.
The test is successful when what we read back is the same we sent
"""
trtl_cpu
.
load_application_file
(
trtl_binary_hmq_
sync
)
trtl_cpu
.
load_application_file
(
trtl_binary_hmq_
async_send
)
trtl_cpu
.
enable
()
time
.
sleep
(
0.1
)
for
hmq
in
trtl_cpu
.
hmq
:
if
hmq
.
idx_hmq
!=
0
:
continue
for
msg
in
trtl_msg
:
print
(
msg
.
payload
[
0
],
msg
.
payload
[
1
]
)
sb
=
hmq
.
get_stats
(
)
msg_r
=
hmq
.
sync_msg
(
msg
)
# the library add automatically this flag, but for the purpose
# of this test assertiong we manually set it
msg
.
header
.
flags
|=
PyMockTurtle
.
TrtlHmqHeader
.
TRTL_HMQ_HEADER_FLAG_SYNC
assert
msg_r
==
msg
sa
=
hmq
.
get_stats
()
assert
sb
[
"message_sent"
]
+
1
==
sa
[
"message_sent"
]
assert
sb
[
"message_received"
]
+
1
==
sa
[
"message_received"
]
assert
msg_r
.
header
.
rt_app_id
==
msg
.
header
.
rt_app_id
assert
msg_r
.
header
.
msg_id
==
msg
.
header
.
msg_id
assert
msg_r
.
header
.
len
==
msg
.
header
.
len
assert
msg_r
.
header
.
sync_id
==
msg
.
header
.
sync_id
assert
msg
.
header
.
flags
==
PyMockTurtle
.
TrtlHmqHeader
.
TRTL_HMQ_HEADER_FLAG_SYNC
assert
msg_r
.
header
.
flags
==
PyMockTurtle
.
TrtlHmqHeader
.
TRTL_HMQ_HEADER_FLAG_ACK
for
v1
,
v2
in
zip
(
msg
.
payload
,
msg_r
.
payload
):
assert
v1
==
v2
tests/test_rt_frm.py
View file @
2c425e43
import
os
import
pytest
import
PyMockTurtle
import
random
import
time
@
pytest
.
fixture
def
trtl_binary_frm
_var
(
trtl_firmware_dir
):
def
trtl_binary_frm
(
trtl_firmware_dir
):
return
os
.
path
.
join
(
trtl_firmware_dir
,
"firmware/rt-frm
-var/fw-rt-frm-var
.bin"
)
"firmware/rt-frm
/fw-rt-frm
.bin"
)
@
pytest
.
fixture
def
trtl_binary_frm_ping
(
trtl_firmware_dir
):
return
os
.
path
.
join
(
trtl_firmware_dir
,
"firmware/rt-frm-ping/fw-rt-frm-ping.bin"
)
@
pytest
.
fixture
def
trtl_binary_frm_version
(
trtl_binary_frm_ping
):
return
trtl_binary_frm_ping
class
TestFirmwareFramework
(
object
):
def
test_var
(
self
,
trtl_cpu0
,
trtl_binary_frm_var
):
trtl_cpu0
.
load_application_file
(
trtl_binary_frm_var
)
trtl_cpu0
.
enable
()
time
.
sleep
(
0.1
)
def
test_var
(
self
,
trtl_cpu
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
var
=
PyMockTurtle
.
TrtlFirmwareVariable
(
trtl_cpu
.
hmq
[
0
])
assert
var
[
0
]
==
0x55AA55AA
assert
var
[
1
]
==
0xFEDE0786
a
=
random
.
randint
(
0
,
4096
)
b
=
random
.
randint
(
0
,
4096
)
var
[
0
]
=
a
var
[
1
]
=
b
assert
a
==
var
[
0
]
assert
b
==
var
[
1
]
def
test_buf
(
self
,
trtl_cpu
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
# TODO implement the Python support
def
test_ping
(
self
,
trtl_cpu0
,
trtl_binary_frm_ping
):
trtl_cpu0
.
load_application_file
(
trtl_binary_frm_ping
)
trtl_cpu0
.
enable
()
time
.
sleep
(
0.1
)
def
test_ping
(
self
,
trtl_cpu
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
assert
trtl_cpu
0
.
ping
()
==
True
assert
trtl_cpu
.
ping
()
==
True
def
test_ver
(
self
,
trtl_cpu0
,
trtl_binary_frm_version
):
trtl_cpu0
.
load_application_file
(
trtl_binary_frm_version
)
trtl_cpu0
.
enable
()
time
.
sleep
(
0.1
)
def
test_ver
(
self
,
trtl_cpu
,
trtl_version_exp
,
trtl_binary_frm
):
trtl_cpu
.
load_application_file
(
trtl_binary_frm
)
trtl_cpu
.
enable
()
assert
trtl_cpu
0
.
ping
()
==
True
assert
trtl_cpu
.
version
()
==
trtl_version_exp
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment