Skip to content

Commit

Permalink
[PDE]: introduce the SONiC Platform Development Env (#7510)
Browse files Browse the repository at this point in the history
The PDE silicon test harness and platform test harness can be found in
src/sonic-platform-pdk-pde
  • Loading branch information
geans-pin authored Jul 24, 2021
1 parent f929c3b commit aa59bfe
Show file tree
Hide file tree
Showing 24 changed files with 1,084 additions and 3 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@
[submodule "src/sonic-platform-daemons"]
path = src/sonic-platform-daemons
url = https://github.com/Azure/sonic-platform-daemons
[submodule "src/sonic-platform-pde"]
path = src/sonic-platform-pde
url = https://github.com/Azure/sonic-platform-pdk-pde
[submodule "src/sonic-frr/frr"]
path = src/sonic-frr/frr
url = https://github.com/Azure/sonic-frr.git
Expand Down
1 change: 1 addition & 0 deletions Makefile.work
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@ SONIC_BUILD_INSTRUCTION := make \
SONIC_IMAGE_VERSION=$(SONIC_IMAGE_VERSION) \
ENABLE_DHCP_GRAPH_SERVICE=$(ENABLE_DHCP_GRAPH_SERVICE) \
ENABLE_ZTP=$(ENABLE_ZTP) \
INCLUDE_PDE=$(INCLUDE_PDE) \
SHUTDOWN_BGP_ON_START=$(SHUTDOWN_BGP_ON_START) \
INCLUDE_KUBERNETES=$(INCLUDE_KUBERNETES) \
KUBERNETES_VERSION=$(KUBERNETES_VERSION) \
Expand Down
95 changes: 95 additions & 0 deletions dockers/docker-pde/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
FROM {{ docker_pde_load_image }}

ARG docker_container_name
ENV PYTHONPATH=/usr/share/sonic/platform

RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf

# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive

{% if ARTIFACTORY_URL is defined and ARTIFACTORY_URL|length -%}
# Insert Artifactory URL references
COPY ["files/03_stretch_af.list", "/etc/apt/sources.list.d/"]
{%- endif %}

# Update apt's cache of available packages
RUN apt-get update && apt-get install -y ipmitool telnet busybox kmod libpcap-dev

# Packages for benchmark tool - nench.sh
RUN apt-get install -y bzip2 curl ioping openssl bc sysstat

# Packages for PDDF

RUN apt-get install -y python-jsonschema

RUN pip3 install pytest pexpect

{% if docker_pde_debs.strip() -%}
# Copy locally-built Debian package dependencies
COPY \
{% for deb in docker_pde_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor -%}
/debs/

# Install locally-built Debian packages and implicitly install their dependencies
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }{%- for deb in docker_pde_debs.split(' ') %}; \
dpkg_apt /debs/{{ deb }}
{%- endfor %}
{%- endif %}

{% if docker_pde_pydebs.strip() -%}
# Copy locally-built Debian package dependencies
COPY \
{% for deb in docker_pde_pydebs.split(' ') -%}
python-debs/{{ deb }}{{' '}}
{%- endfor -%}
/debs/

# Install locally-built Debian packages and implicitly install their dependencies
{%- for deb in docker_pde_pydebs.split(' ') %}
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /debs/{{ deb }}
{%- endfor %}
{%- endif %}

{% if docker_pde_whls.strip() -%}
# Copy locally-built Python wheel dependencies
COPY \
{% for whl in docker_pde_whls.split(' ') -%}
python-wheels/{{ whl }}{{' '}}
{%- endfor -%}
/python-wheels/

# Install locally-built Python wheel dependencies

RUN pip3 install \


{% for whl in docker_pde_whls.split(' ') -%}
/python-wheels/{{ whl }}{{' '}}
{%- endfor %}
{% endif %}

{% if ARTIFACTORY_URL is defined and ARTIFACTORY_URL|length -%}
# Remove Artifactory URL references
RUN rm -f /etc/apt/sources.list.d/03_stretch_af.list && apt-get update
{%- endif %}

# Clean up
RUN apt-get clean -y; \
apt-get autoclean -y; \
apt-get autoremove -y
RUN rm -rf /debs ~/.cache

RUN mkdir -p /home/pde

COPY ["bench.sh", "/usr/bin/"]
COPY ["stress-sfp-i2c.py", "/home/pde"]
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
COPY ["syseeprom.py", "/usr/bin/"]
COPY ["docker_init.sh", "/usr/bin/"]
COPY ["cancun_files/cancun_4.5.0/*", "cancun_files/cancun_6.6.1/*", "cancun_files/cancun_4.3.0/*", "/usr/lib/cancun/"]
COPY ["syncd_init_common.sh", "/usr/bin/"]

ENTRYPOINT ["/usr/bin/docker_init.sh"]
37 changes: 37 additions & 0 deletions dockers/docker-pde/base_image_files/pde-bench
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/bin/bash

CSV=/tmp/bench.csv

# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi

# Start PDE if it's deactivated
if [ $(docker ps | grep -c pde) -eq 0 ]; then
pde.sh start
fi

# Allow 5 seconds for PDE to be coming up
for t in $(seq 1 5)
do
if [ $(docker ps | grep -c pde) -gt 0 ]; then
break
fi
sleep 1
done
if [ $(docker ps | grep -c pde) -eq 0 ]; then
echo "docker-pde is not alive, existing ..."
exit 1
fi

# Launch the benchmark test suite
docker exec -it pde /usr/bin/bench.sh
echo "$(docker exec -it pde cat ${CSV})" > ${CSV}

echo ""
echo "CSV Report: ${CSV}"
echo "-----------------------------------------------------------------------"
echo "$(cat ${CSV})"
echo "-----------------------------------------------------------------------"
Loading

0 comments on commit aa59bfe

Please sign in to comment.