Commit 394c348c authored by Jérome Perrin's avatar Jérome Perrin

Update Release Candidate

parents 26defa86 6edf7a50
...@@ -6,12 +6,12 @@ parts = ...@@ -6,12 +6,12 @@ parts =
# Contains libasound # Contains libasound
recipe = slapos.recipe.cmmi recipe = slapos.recipe.cmmi
shared = true shared = true
url = ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.3.tar.bz2 url = https://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.10.tar.bz2
md5sum = eefe5992567ba00d6110a540657aaf5c md5sum = aced5acdb6161ed86e5ca3bb10618ca1
configure-options = configure-options =
--disable-static --disable-static
--disable-aload --disable-aload
--disable-rawmidi --enable-rawmidi
--disable-ucm --disable-ucm
--disable-alisp --disable-alisp
--disable-old-symbols --disable-old-symbols
......
...@@ -21,7 +21,7 @@ patches = ...@@ -21,7 +21,7 @@ patches =
${:_profile_base_location_}/ca-certificates-no-cryptography.patch#14ad1308623b0d15420906ae3d9b4867 ${:_profile_base_location_}/ca-certificates-no-cryptography.patch#14ad1308623b0d15420906ae3d9b4867
patch-options = -p0 patch-options = -p0
configure-command = true configure-command = true
make-targets = install DESTDIR=@@LOCATION@@ CERTSDIR=certs SBINDIR=sbin make-targets = install DESTDIR=@@LOCATION@@ CERTSDIR=certs SBINDIR=/sbin
environment = environment =
PATH=${xz-utils:location}/bin:%(PATH)s PATH=${xz-utils:location}/bin:%(PATH)s
pre-make-hook = pre-make-hook =
......
...@@ -32,6 +32,7 @@ part = firefox ...@@ -32,6 +32,7 @@ part = firefox
recipe = slapos.recipe.build recipe = slapos.recipe.build
location = ${buildout:bin-directory}/${:part} location = ${buildout:bin-directory}/${:part}
fonts-conf = ${firefox-default-fonts-conf:output} fonts-conf = ${firefox-default-fonts-conf:output}
gsettings-schema-dir = ${gtk-3:location}/share/glib-2.0/schemas/
init = init =
self.buildout[options['part']] self.buildout[options['part']]
install = install =
...@@ -45,15 +46,21 @@ install = ...@@ -45,15 +46,21 @@ install =
# BBB use a default fonts.conf for compatibility, but it's software instance # BBB use a default fonts.conf for compatibility, but it's software instance
# responsability to build a fonts.conf with the fonts they want. # responsability to build a fonts.conf with the fonts they want.
[ "$FONTCONFIG_FILE" ] || export FONTCONFIG_FILE=%s [ "$FONTCONFIG_FILE" ] || export FONTCONFIG_FILE=%s
[ "$GSETTINGS_SCHEMA_DIR" ] || export GSETTINGS_SCHEMA_DIR=%s
exec $d/firefox "$@" exec $d/firefox "$@"
""" % ( """ % (
part['location'], part['location'],
':'.join(part['library'].split()), ':'.join(part['library'].split()),
':'.join(part['path'].split()), ':'.join(part['path'].split()),
options['fonts-conf'], options['fonts-conf'],
options['gsettings-schema-dir'],
)) ))
os.fchmod(f.fileno(), 0o755) os.fchmod(f.fileno(), 0o755)
[firefox-wrapper-115]
<= firefox-wrapper
part = firefox-115
[firefox-wrapper-78] [firefox-wrapper-78]
<= firefox-wrapper <= firefox-wrapper
part = firefox-78 part = firefox-78
...@@ -66,10 +73,6 @@ part = firefox-68 ...@@ -66,10 +73,6 @@ part = firefox-68
<= firefox-wrapper <= firefox-wrapper
part = firefox-60 part = firefox-60
[firefox-wrapper-52]
<= firefox-wrapper
part = firefox-52
[firefox-default-fonts-conf] [firefox-default-fonts-conf]
recipe = slapos.recipe.template:jinja2 recipe = slapos.recipe.template:jinja2
url = ${template-fonts-conf:output} url = ${template-fonts-conf:output}
...@@ -92,7 +95,13 @@ cache-dir = ...@@ -92,7 +95,13 @@ cache-dir =
# installed in ${buildout:bin-directory}. # installed in ${buildout:bin-directory}.
# Installing ${firefox:} is not enough, because wrapper setting $LD_LIBRARY_PATH # Installing ${firefox:} is not enough, because wrapper setting $LD_LIBRARY_PATH
# would not be created. # would not be created.
<= firefox-68 <= firefox-115
[firefox-115]
<= firefox-download
version = 115.3.1esr
i686-md5sum = f0df1b5cce1edd65addc823da02f9488
x86_64-md5sum = 910c0786459cf1e4dc214e6402d0633e
[firefox-78] [firefox-78]
<= firefox-download <= firefox-download
...@@ -112,12 +121,6 @@ version = 60.0.2esr ...@@ -112,12 +121,6 @@ version = 60.0.2esr
i686-md5sum = ce7c80716036dfb5c2fb1ca2538556ff i686-md5sum = ce7c80716036dfb5c2fb1ca2538556ff
x86_64-md5sum = 6fe25d9a3fcc82670320242c9047d1da x86_64-md5sum = 6fe25d9a3fcc82670320242c9047d1da
[firefox-52]
<= firefox-download
version = 52.9.0esr
i686-md5sum = 9aa18888b7812670208490609d75c9bc
x86_64-md5sum = 9336d70f45070c743d08e5473b783a7a
[firefox-download] [firefox-download]
recipe = slapos.recipe.build recipe = slapos.recipe.build
slapos_promise = slapos_promise =
...@@ -157,8 +160,10 @@ library = ...@@ -157,8 +160,10 @@ library =
${libXext:location}/lib ${libXext:location}/lib
${libXi:location}/lib ${libXi:location}/lib
${libxml2:location}/lib ${libxml2:location}/lib
${libXrandr:location}/lib
${libXrender:location}/lib ${libXrender:location}/lib
${libXt:location}/lib ${libXt:location}/lib
${libXtst:location}/lib
${mesa:location}/lib ${mesa:location}/lib
${pango:location}/lib ${pango:location}/lib
${pcre:location}/lib ${pcre:location}/lib
...@@ -186,7 +191,13 @@ md5sum = ${:x86_64-md5sum} ...@@ -186,7 +191,13 @@ md5sum = ${:x86_64-md5sum}
[geckodriver] [geckodriver]
# Current geckodriver installed as ${buildout:bin-directory}/geckodriver # Current geckodriver installed as ${buildout:bin-directory}/geckodriver
<= geckodriver-0.24.0 <= geckodriver-0.33.0
[geckodriver-0.33.0]
<= geckodriver-base
version = 0.33.0
i686-md5sum = c4a9e6c92dc493f25c8d390f1c6fb11c
x86_64-md5sum = 563c82cfbb21478450e1c828e3730b10
[geckodriver-0.24.0] [geckodriver-0.24.0]
<= geckodriver-base <= geckodriver-base
...@@ -200,12 +211,6 @@ version = 0.22.0 ...@@ -200,12 +211,6 @@ version = 0.22.0
i686-md5sum = 6de7544753fda56fbaa8382dcac99aaa i686-md5sum = 6de7544753fda56fbaa8382dcac99aaa
x86_64-md5sum = 81746200ce5841e00cabf3b8ea7db542 x86_64-md5sum = 81746200ce5841e00cabf3b8ea7db542
[geckodriver-0.16.1]
<= geckodriver-base
version = 0.16.1
i686-md5sum = not not on github
x86_64-md5sum = 57dfd55d4759d9878eb75b4c0123d00c
[geckodriver-base] [geckodriver-base]
# Installs geckodriver ${version} # Installs geckodriver ${version}
recipe = slapos.recipe.build recipe = slapos.recipe.build
......
[buildout]
extends =
../ncurses/buildout.cfg
parts =
libedit
[libedit]
recipe = slapos.recipe.cmmi
shared = true
url = https://thrysoee.dk/editline/libedit-20230828-3.1.tar.gz
md5sum = 16bb2ab0d33bce3467f5cd4ec7d8f3ee
environment =
CPPFLAGS=-I${ncurses:location}/include
LDFLAGS=-L${ncurses:location}/lib -Wl,-rpath=${ncurses:location}/lib
...@@ -9,6 +9,7 @@ extends = ...@@ -9,6 +9,7 @@ extends =
../groonga/buildout.cfg ../groonga/buildout.cfg
../jemalloc/buildout.cfg ../jemalloc/buildout.cfg
../libaio/buildout.cfg ../libaio/buildout.cfg
../libedit/buildout.cfg
../libxml2/buildout.cfg ../libxml2/buildout.cfg
../lz4/buildout.cfg ../lz4/buildout.cfg
../ncurses/buildout.cfg ../ncurses/buildout.cfg
...@@ -16,7 +17,6 @@ extends = ...@@ -16,7 +17,6 @@ extends =
../patch/buildout.cfg ../patch/buildout.cfg
../pcre/buildout.cfg ../pcre/buildout.cfg
../pkgconfig/buildout.cfg ../pkgconfig/buildout.cfg
../readline/buildout.cfg
../snappy/buildout.cfg ../snappy/buildout.cfg
../xz-utils/buildout.cfg ../xz-utils/buildout.cfg
../zlib/buildout.cfg ../zlib/buildout.cfg
...@@ -73,11 +73,11 @@ configure-options = ...@@ -73,11 +73,11 @@ configure-options =
# https://lore.kernel.org/linux-btrfs/ed3642c2-682e-08a1-f18d-2d63409b7631@nexedi.com/T/ # https://lore.kernel.org/linux-btrfs/ed3642c2-682e-08a1-f18d-2d63409b7631@nexedi.com/T/
-DWITH_FALLOCATE=NO -DWITH_FALLOCATE=NO
## ##
CMAKE_CFLAGS = -I${bzip2:location}/include -I${jemalloc:location}/include -I${libaio:location}/include -I${libxml2:location}/include -I${ncurses:location}/include -I${openssl:location}/include -I${pcre:location}/include -I${readline5:location}/include -I${xz-utils:location}/include -I${zlib:location}/include -I${unixodbc:location}/include -I${lz4:location}/include -I${snappy:location}/include -I${zstd:location}/include CMAKE_CFLAGS = -I${bzip2:location}/include -I${jemalloc:location}/include -I${libaio:location}/include -I${libxml2:location}/include -I${ncurses:location}/include -I${openssl:location}/include -I${pcre:location}/include -I${libedit:location}/include -I${xz-utils:location}/include -I${zlib:location}/include -I${unixodbc:location}/include -I${lz4:location}/include -I${snappy:location}/include -I${zstd:location}/include
CMAKE_LIBRARY_PATH = ${bzip2:location}/lib:${jemalloc:location}/lib:${libaio:location}/lib:${libxml2:location}/lib:${ncurses:location}/lib:${openssl:location}/lib:${pcre:location}/lib:${readline5:location}/lib:${xz-utils:location}/lib:${zlib:location}/lib:${unixodbc:location}/lib:${lz4:location}/lib:${snappy:location}/lib:${zstd:location}/lib CMAKE_LIBRARY_PATH = ${bzip2:location}/lib:${jemalloc:location}/lib:${libaio:location}/lib:${libxml2:location}/lib:${ncurses:location}/lib:${openssl:location}/lib:${pcre:location}/lib:${libedit:location}/lib:${xz-utils:location}/lib:${zlib:location}/lib:${unixodbc:location}/lib:${lz4:location}/lib:${snappy:location}/lib:${zstd:location}/lib
environment = environment =
CMAKE_PROGRAM_PATH=${cmake:location}/bin CMAKE_PROGRAM_PATH=${cmake:location}/bin
CMAKE_INCLUDE_PATH=${bzip2:location}/include:${libaio:location}/include:${libaio:location}/include:${libxml2:location}/include:${ncurses:location}/include:${openssl:location}/include:${pcre:location}/include:${readline5:location}/include:${xz-utils:location}/include:${zlib:location}/include:${unixodbc:location}/include:${lz4:location}/include:${snappy:location}/include:${zstd:location}/include CMAKE_INCLUDE_PATH=${bzip2:location}/include:${libaio:location}/include:${libaio:location}/include:${libxml2:location}/include:${ncurses:location}/include:${openssl:location}/include:${pcre:location}/include:${libedit:location}/include:${xz-utils:location}/include:${zlib:location}/include:${unixodbc:location}/include:${lz4:location}/include:${snappy:location}/include:${zstd:location}/include
CMAKE_LIBRARY_PATH=${:CMAKE_LIBRARY_PATH} CMAKE_LIBRARY_PATH=${:CMAKE_LIBRARY_PATH}
LDFLAGS=-L${bzip2:location}/lib -L${jemalloc:location}/lib -L${libaio:location}/lib -L${pcre:location}/lib -L${xz-utils:location}/lib -L${zlib:location}/lib -L${unixodbc:location}/lib -L${lz4:location}/lib -L${snappy:location}/lib -L${zstd:location}/lib LDFLAGS=-L${bzip2:location}/lib -L${jemalloc:location}/lib -L${libaio:location}/lib -L${pcre:location}/lib -L${xz-utils:location}/lib -L${zlib:location}/lib -L${unixodbc:location}/lib -L${lz4:location}/lib -L${snappy:location}/lib -L${zstd:location}/lib
PATH=${patch:location}/bin:%(PATH)s PATH=${patch:location}/bin:%(PATH)s
......
...@@ -9,6 +9,7 @@ extends = ...@@ -9,6 +9,7 @@ extends =
../openssl/buildout.cfg ../openssl/buildout.cfg
../patch/buildout.cfg ../patch/buildout.cfg
../readline/buildout.cfg ../readline/buildout.cfg
../sed/buildout.cfg
../sqlite3/buildout.cfg ../sqlite3/buildout.cfg
../zlib/buildout.cfg ../zlib/buildout.cfg
../file/buildout.cfg ../file/buildout.cfg
...@@ -49,6 +50,8 @@ patches = ${python2.7-lib-patches:patches} ...@@ -49,6 +50,8 @@ patches = ${python2.7-lib-patches:patches}
${:_profile_base_location_}/pytracemalloc_pep445.patch#9f3145817afa2b7fad801fde8447e396 ${:_profile_base_location_}/pytracemalloc_pep445.patch#9f3145817afa2b7fad801fde8447e396
url = url =
http://www.python.org/ftp/python/${:package_version}/Python-${:package_version}${:package_version_suffix}.tar.xz http://www.python.org/ftp/python/${:package_version}/Python-${:package_version}${:package_version_suffix}.tar.xz
pre-configure =
${sed:location}/bin/sed -i -e "s/if 'curses' in ln:/if 'curses' in ln.split(os.sep)[-1]:/" setup.py
configure-options = configure-options =
--enable-ipv6 --enable-ipv6
--enable-unicode=ucs4 --enable-unicode=ucs4
......
...@@ -10,6 +10,7 @@ extends = ...@@ -10,6 +10,7 @@ extends =
../ncurses/buildout.cfg ../ncurses/buildout.cfg
../openssl/buildout.cfg ../openssl/buildout.cfg
../readline/buildout.cfg ../readline/buildout.cfg
../sed/buildout.cfg
../sqlite3/buildout.cfg ../sqlite3/buildout.cfg
../util-linux/buildout.cfg ../util-linux/buildout.cfg
../xz-utils/buildout.cfg ../xz-utils/buildout.cfg
...@@ -30,6 +31,8 @@ executable = @@LOCATION@@/bin/${:_buildout_section_name_} ...@@ -30,6 +31,8 @@ executable = @@LOCATION@@/bin/${:_buildout_section_name_}
url = url =
https://www.python.org/ftp/python/${:package_version}/Python-${:package_version}${:package_version_suffix}.tar.xz https://www.python.org/ftp/python/${:package_version}/Python-${:package_version}${:package_version_suffix}.tar.xz
pre-configure =
${sed:location}/bin/sed -i -e "s/if 'curses' in ln:/if 'curses' in ln.split(os.sep)[-1]:/" setup.py
configure-options = configure-options =
--enable-ipv6 --enable-ipv6
--without-ensurepip --without-ensurepip
......
...@@ -5,36 +5,8 @@ extends = ...@@ -5,36 +5,8 @@ extends =
../patch/buildout.cfg ../patch/buildout.cfg
parts = parts =
readline5
readline readline
# readline-5.x is still used for GPL2 only softwares.
[readline5]
recipe = slapos.recipe.cmmi
shared = true
url = http://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
patches =
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-001#9d4d41622aa9b230c57f68548ce87d8f
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-002#f03e512d14206e37f7d6a748b56b9476
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-003#252b42d8750f1a94b6bdf086612dceb2
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-004#a32333c2e603a3ed250514e91050e552
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-005#8106796c09b789523a3a78ab69c04b6d
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-006#512188e2bf0837f7eca19dbf71f182ae
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-007#ac17aca62eb6fb398c9f2fe9de540aff
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-008#2484c392db021905f112cf97a94dfd4c
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-009#fc6eb35d07914fae5c57d49c12483ff7
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-010#7a2bf3dc7ac7680b1461a5701100e91b
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-011#ef6cef6822663470f6ac8c517c5a7ec6
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-012#e3e9f441c8111589855bc363e5640f6c
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-013#3e2e5f543ed268a68fd1fa839faade1a
http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-014#a1be30e1c6f1099bb5fcef00a2631fb8
md5sum = e39331f32ad14009b9ff49cc10c5e751
pre-configure = cp -f ${gnu-config:location}/config.sub ${gnu-config:location}/config.guess support
configure-options =
--enable-multibyte
--disable-static
patch-binary = ${patch:location}/bin/patch
[readline] [readline]
recipe = slapos.recipe.cmmi recipe = slapos.recipe.cmmi
shared = true shared = true
......
...@@ -135,7 +135,7 @@ git-executable = ${git:location}/bin/git ...@@ -135,7 +135,7 @@ git-executable = ${git:location}/bin/git
<= git-repository <= git-repository
repository = https://lab.nexedi.com/nexedi/gitlab-ce.git repository = https://lab.nexedi.com/nexedi/gitlab-ce.git
# 9.5.10 + NXD patches: # 9.5.10 + NXD patches:
revision = v8.16.0.pre-16286-g9d66cd7b834 revision = v9.5.10-12-g74c9f9fe7f9
location = ${buildout:parts-directory}/gitlab location = ${buildout:parts-directory}/gitlab
[gitlab-shell-repository] [gitlab-shell-repository]
......
{
"name": "NEO",
"description": "Distributed, redundant and transactional storage for ZODB",
"serialisation": "json-in-xml",
"software-type": {
"default": {
"title": "Default",
"software-type": "default",
"request": "instance-neo-input-schema.json",
"response": "instance-neo-output-schema.json",
"index": 0
}
}
}
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
[template] [template]
filename = instance.cfg filename = instance.cfg
md5sum = f23909a703ac9001afec38cbac19591a md5sum = 1e3d2626ffd677ab6d3c078a376c1c7c
[amarisoft-stats.jinja2.py] [amarisoft-stats.jinja2.py]
_update_hash_filename_ = amarisoft-stats.jinja2.py _update_hash_filename_ = amarisoft-stats.jinja2.py
...@@ -26,41 +26,57 @@ md5sum = c4d5e9fcf460d88bc2b4bcfbdfe554f7 ...@@ -26,41 +26,57 @@ md5sum = c4d5e9fcf460d88bc2b4bcfbdfe554f7
_update_hash_filename_ = amarisoft-rf-info.jinja2.py _update_hash_filename_ = amarisoft-rf-info.jinja2.py
md5sum = ab666fdfadbfc7d8a16ace38d295c883 md5sum = ab666fdfadbfc7d8a16ace38d295c883
[ncclient_common] [ru_libinstance.jinja2.cfg]
_update_hash_filename_ = ncclient_common.py _update_hash_filename_ = ru/libinstance.jinja2.cfg
md5sum = ef4b9c9ccbb4627c0d74293802e83d57
[ru_sdr_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/sdr/libinstance.jinja2.cfg
md5sum = 4be142fcd890e0f1c9573c8e724062fb
[ru_lopcomm_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/lopcomm/libinstance.jinja2.cfg
md5sum = 7b84e582f149da52013740251a2e7ce4
[ru_sunwave_libinstance.jinja2.cfg]
_update_hash_filename_ = ru/sunwave/libinstance.jinja2.cfg
md5sum = 5c5248494bcd9d27d50636ee9fab7c87
[ru_lopcomm_ncclient_common.py]
_update_hash_filename_ = ru/lopcomm/ncclient_common.py
md5sum = 6f8d0592cc4b0b695cea5a0c25aafc4e md5sum = 6f8d0592cc4b0b695cea5a0c25aafc4e
[lopcomm-rrh-stats.jinja2.py] [ru_lopcomm_stats.jinja2.py]
_update_hash_filename_ = lopcomm-rrh-stats.jinja2.py _update_hash_filename_ = ru/lopcomm/stats.jinja2.py
md5sum = b861ef43beba4a0a2904e8c2aee04723 md5sum = b861ef43beba4a0a2904e8c2aee04723
[lopcomm-rrh-config.jinja2.py] [ru_lopcomm_config.jinja2.py]
_update_hash_filename_ = lopcomm-rrh-config.jinja2.py _update_hash_filename_ = ru/lopcomm/config.jinja2.py
md5sum = f2f550b68c8ab243ce1a4bb73a9abc1c md5sum = f2f550b68c8ab243ce1a4bb73a9abc1c
[lopcomm-rrh-software.jinja2.py] [ru_lopcomm_reset-info.jinja2.py]
_update_hash_filename_ = lopcomm-rrh-software.jinja2.py _update_hash_filename_ = ru/lopcomm/reset-info.jinja2.py
md5sum = 2cd8515253b75e2ab13cc77399762851
[lopcomm-rrh-supervision.jinja2.py]
_update_hash_filename_ = lopcomm-rrh-supervision.jinja2.py
md5sum = 243d9fbf640b8dc8bf63d69b07b8afed
[lopcomm-rrh-reset-info.jinja2.py]
_update_hash_filename_ = lopcomm-rrh-reset-info.jinja2.py
md5sum = e03d7fea24566aa8291f0dc4aaf09c67 md5sum = e03d7fea24566aa8291f0dc4aaf09c67
[lopcomm-rrh-reset.jinja2.py] [ru_lopcomm_reset.jinja2.py]
_update_hash_filename_ = lopcomm-rrh-reset.jinja2.py _update_hash_filename_ = ru/lopcomm/reset.jinja2.py
md5sum = 63472d5dc9bd46923d3941b5189e2ccd md5sum = 63472d5dc9bd46923d3941b5189e2ccd
[ru_lopcomm_software.jinja2.py]
_update_hash_filename_ = ru/lopcomm/software.jinja2.py
md5sum = 2cd8515253b75e2ab13cc77399762851
[ru_lopcomm_supervision.jinja2.py]
_update_hash_filename_ = ru/lopcomm/supervision.jinja2.py
md5sum = 243d9fbf640b8dc8bf63d69b07b8afed
[template-enb] [template-enb]
_update_hash_filename_ = instance-enb.jinja2.cfg _update_hash_filename_ = instance-enb.jinja2.cfg
md5sum = 40f735514d8f4ead0d4328c58b78be93 md5sum = 104d63450ec08d67bc6e82a9dacee6ae
[template-gnb] [template-gnb]
_update_hash_filename_ = instance-gnb.jinja2.cfg _update_hash_filename_ = instance-gnb.jinja2.cfg
md5sum = 2d7558e4799818a5546850f735fbb399 md5sum = a64a0d06740f97cd82eeec0932f61004
[template-core-network] [template-core-network]
_update_hash_filename_ = instance-core-network.jinja2.cfg _update_hash_filename_ = instance-core-network.jinja2.cfg
...@@ -114,13 +130,13 @@ md5sum = c0313f9d15543361f7c8e19af96c737a ...@@ -114,13 +130,13 @@ md5sum = c0313f9d15543361f7c8e19af96c737a
filename = config/ue-nr.jinja2.cfg filename = config/ue-nr.jinja2.cfg
md5sum = 824233ab4d53ec428d358fb67bca8ba2 md5sum = 824233ab4d53ec428d358fb67bca8ba2
[CreateProcessingEle.jinja2.xml] [ru_lopcomm_CreateProcessingEle.jinja2.xml]
filename = netconf/CreateProcessingEle.jinja2.xml _update_hash_filename_ = ru/lopcomm/CreateProcessingEle.jinja2.xml
md5sum = e435990eb0a0d4be41efa9bd16dce09b md5sum = e435990eb0a0d4be41efa9bd16dce09b
[cu_config.jinja2.xml] [ru_lopcomm_cu_config.jinja2.xml]
filename = netconf/cu_config.jinja2.xml _update_hash_filename_ = ru/lopcomm/cu_config.jinja2.xml
md5sum = d10b063ad4edc760e154f7a8d63bea47 md5sum = 09123ad68c6d8e7e4e201bcc2ab331c6
[software.cfg.html] [software.cfg.html]
_update_hash_filename_ = gadget/software.cfg.html _update_hash_filename_ = gadget/software.cfg.html
......
...@@ -423,17 +423,11 @@ ...@@ -423,17 +423,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -256,17 +256,11 @@ ...@@ -256,17 +256,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -299,17 +299,11 @@ ...@@ -299,17 +299,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -349,17 +349,11 @@ ...@@ -349,17 +349,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -299,17 +299,11 @@ ...@@ -299,17 +299,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -245,17 +245,11 @@ ...@@ -245,17 +245,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -299,17 +299,11 @@ ...@@ -299,17 +299,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -320,17 +320,11 @@ ...@@ -320,17 +320,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -297,7 +297,7 @@ promise = check_baseband_latency ...@@ -297,7 +297,7 @@ promise = check_baseband_latency
config-testing = {{ slapparameter_dict.get("testing", False) }} config-testing = {{ slapparameter_dict.get("testing", False) }}
config-amarisoft-stats-log = ${amarisoft-stats-template:log-output} config-amarisoft-stats-log = ${amarisoft-stats-template:log-output}
config-stats-period = {{ slapparameter_dict.get("gnb_stats_fetch_period", 60) }} config-stats-period = {{ slapparameter_dict.get("gnb_stats_fetch_period", 60) }}
config-min-txrx-delay = {{ slapparameter_dict.get("min_txrx_delay", 5) }} config-min-rxtx-delay = {{ slapparameter_dict.get("min_rxtx_delay", 0) }}
[check-amarisoft-stats-log.py] [check-amarisoft-stats-log.py]
<= macro.promise <= macro.promise
......
...@@ -266,17 +266,11 @@ ...@@ -266,17 +266,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -310,17 +310,11 @@ ...@@ -310,17 +310,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -304,17 +304,11 @@ ...@@ -304,17 +304,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -310,17 +310,11 @@ ...@@ -310,17 +310,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -255,17 +255,11 @@ ...@@ -255,17 +255,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (higher than this value)", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Baseband latency promise will fail if average TX/RX diff reaches threshold (higher than this value)",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -310,17 +310,11 @@ ...@@ -310,17 +310,11 @@
"type": "number", "type": "number",
"default": 0 "default": 0
}, },
"min_txrx_delay": { "min_rxtx_delay": {
"title": "Minimum available time for radio front end processing (ms)", "title": "Minimum available time for radio front end processing (ms)",
"description": "Minimum TX/RX diff threshold above which baseband latency promise will fail", "description": "Baseband latency promise will fail if minimum TX/RX diff reaches threshold (lower than this value)",
"type": "number", "type": "number",
"default": 5 "default": 0
},
"avg_txrx_delay": {
"title": "Average available time for radio front end processing (ms)",
"description": "Average TX/RX diff threshold above which baseband latency promise will fail",
"type": "number",
"default": 7
}, },
"xlog_fluentbit_forward_host": { "xlog_fluentbit_forward_host": {
"title": "Address to Forward Xlog by Fluenbit", "title": "Address to Forward Xlog by Fluenbit",
......
...@@ -38,6 +38,12 @@ context = ...@@ -38,6 +38,12 @@ context =
raw bbu ${rf-mode:bbu} raw bbu ${rf-mode:bbu}
raw ru ${rf-mode:ru} raw ru ${rf-mode:ru}
$${:extra-context} $${:extra-context}
import-list =
rawfile ru_libinstance.jinja2.cfg ${ru_libinstance.jinja2.cfg:target}
rawfile ru_sdr_libinstance.jinja2.cfg ${ru_sdr_libinstance.jinja2.cfg:target}
rawfile ru_lopcomm_libinstance.jinja2.cfg ${ru_lopcomm_libinstance.jinja2.cfg:target}
rawfile ru_sunwave_libinstance.jinja2.cfg ${ru_sunwave_libinstance.jinja2.cfg:target}
[amarisoft] [amarisoft]
recipe = slapos.recipe.build recipe = slapos.recipe.build
...@@ -270,14 +276,16 @@ extra-context = ...@@ -270,14 +276,16 @@ extra-context =
raw sib23_template ${sib23.jinja2.asn:target} raw sib23_template ${sib23.jinja2.asn:target}
raw amarisoft_stats_template ${amarisoft-stats.jinja2.py:target} raw amarisoft_stats_template ${amarisoft-stats.jinja2.py:target}
raw amarisoft_rf_info_template ${amarisoft-rf-info.jinja2.py:target} raw amarisoft_rf_info_template ${amarisoft-rf-info.jinja2.py:target}
raw lopcomm_rrh_stats_template ${lopcomm-rrh-stats.jinja2.py:target} raw ru_lopcomm_stats_template ${ru_lopcomm_stats.jinja2.py:target}
raw lopcomm_rrh_config_template ${lopcomm-rrh-config.jinja2.py:target} raw ru_lopcomm_config_template ${ru_lopcomm_config.jinja2.py:target}
raw lopcomm_rrh_software_template ${lopcomm-rrh-software.jinja2.py:target} raw ru_lopcomm_software_template ${ru_lopcomm_software.jinja2.py:target}
raw lopcomm_rrh_supervision_template ${lopcomm-rrh-supervision.jinja2.py:target} raw ru_lopcomm_supervision_template ${ru_lopcomm_supervision.jinja2.py:target}
raw lopcomm_rrh_reset_info_template ${lopcomm-rrh-reset-info.jinja2.py:target} raw ru_lopcomm_reset_info_template ${ru_lopcomm_reset-info.jinja2.py:target}
raw lopcomm_rrh_reset_template ${lopcomm-rrh-reset.jinja2.py:target} raw ru_lopcomm_reset_template ${ru_lopcomm_reset.jinja2.py:target}
raw CreateProcessingEle_template ${CreateProcessingEle.jinja2.xml:target} raw ru_lopcomm_CreateProcessingEle_template ${ru_lopcomm_CreateProcessingEle.jinja2.xml:target}
raw cu_config_template ${cu_config.jinja2.xml:target} raw ru_lopcomm_cu_config_template ${ru_lopcomm_cu_config.jinja2.xml:target}
raw ru_lopcomm_firmware_path ${ru_lopcomm_firmware-dl:target}
raw ru_lopcomm_firmware_filename ${ru_lopcomm_firmware-dl:filename}
raw openssl_location ${openssl:location} raw openssl_location ${openssl:location}
raw default_lte_bandwidth ${default-params:default-lte-bandwidth} raw default_lte_bandwidth ${default-params:default-lte-bandwidth}
raw default_lte_inactivity_timer ${default-params:default-lte-inactivity-timer} raw default_lte_inactivity_timer ${default-params:default-lte-inactivity-timer}
......
# ru/buildout.cfg provides common software code for handling Radio Units.
[buildout]
extends =
sdr/buildout.cfg
lopcomm/buildout.cfg
sunwave/buildout.cfg
[ru_libinstance.jinja2.cfg]
<= download-base
{#- Package ru/libinstance provides common instance code for handling Radio Units and cells.
Use buildout() macro to emit instance-level code to
handle configured RU.
NOTE: driver-specific logic is implemented in rudrv.buildout() .
#}
{%- macro buildout() %}
{#- part emits new buildout section and registers it into buildout.parts #}
{%- set parts_list = [] %}
{%- macro part(name) %}
{%- do parts_list.append(name) %}
[{{ name }}]
{%- endmacro %}
{#- promise emits new buildout section for a promise #}
{%- macro promise(name) %}
{{ part('promise-'+name) }}
<= monitor-promise-base
name = {{ name }}.py
config-testing = {{ slapparameter_dict.get("testing", False) }}
config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
{%- endmacro %}
{#- import RU drivers #}
{%- import 'ru_sdr_libinstance.jinja2.cfg' as rudrv_sdr with context %}
{%- import 'ru_lopcomm_libinstance.jinja2.cfg' as rudrv_lopcomm with context %}
{%- import 'ru_sunwave_libinstance.jinja2.cfg' as rudrv_sunwave with context %}
{%- set rudrv_dict = namespace(sdr=rudrv_sdr,
lopcomm=rudrv_lopcomm,
sunwave=rudrv_sunwave) %}
{#- invoke RU-specific buildout handler #}
{%- set ru_type = {'lopcomm': 'lopcomm', 'm2ru': 'sunwave'}.get(ru, 'sdr') %}
{%- set rudrv = rudrv_dict[ru_type] %}
{{ rudrv.buildout() }}
[buildout]
parts +=
{%- for part in parts_list %}
{{ part }}
{%- endfor %}
{%- endmacro %}
# ru/lopcomm/buildout.cfg provides software code for handling Lopcomm ORAN Radio Units.
[buildout]
parts +=
ru_lopcomm_ncclient_common.py
[ru_lopcomm_libinstance.jinja2.cfg]
<= download-base
[ru_lopcomm_config.jinja2.py]
<= download-base
[ru_lopcomm_reset-info.jinja2.py]
<= download-base
[ru_lopcomm_reset.jinja2.py]
<= download-base
[ru_lopcomm_stats.jinja2.py]
<= download-base
[ru_lopcomm_software.jinja2.py]
<= download-base
[ru_lopcomm_supervision.jinja2.py]
<= download-base
[ru_lopcomm_ncclient_common.py]
<= download-base
destination = ${buildout:directory}/ncclient_common.py
[ru_lopcomm_CreateProcessingEle.jinja2.xml]
<= download-base
[ru_lopcomm_cu_config.jinja2.xml]
<= download-base
[ru_lopcomm_firmware-dl]
recipe = slapos.recipe.build:download
url = https://lab.nexedi.com/nexedi/ors-utils/raw/master/lopcomm-firmware/${:filename}
filename = PR.PRM61C70V1004.006.tar.gz
md5sum = 5139019aae77c2f3178a99915f1c57dc
{#- Package ru/lopcomm/libinstance provides instance code for handling Lopcomm ORAN Radio Units. #}
{%- macro buildout() %}
{#- indicate whether RU is listening for netconf #}
{{ promise('lopcomm-rrh-netconf-socket') }}
promise = check_socket_listening
config-host = ${slap-configuration:tap-ipv6-gateway}
config-port = 830
{#- monitor state of netconf connection + keep on touching RU watchdog #}
[lopcomm-rrh-supervision-template]
recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do
log-output = ${directory:var}/log/lopcomm-rrh-supervision.log
supervision-reply-json-log-output = ${directory:var}/log/lopcomm-rrh-supervision-reply.json.log
context =
section directory directory
section slap_configuration slap-configuration
key slapparameter_dict slap-configuration:configuration
key log_file :log-output
key supervision_reply_json_log_file :supervision-reply-json-log-output
raw testing {{ slapparameter_dict.get("testing", False) }}
raw python_path {{ buildout_directory}}/bin/pythonwitheggs
raw buildout_directory_path {{ buildout_directory }}
raw etc_path ${directory:etc}
import netaddr netaddr
mode = 0775
url = {{ ru_lopcomm_supervision_template }}
output = ${directory:bin}/lopcomm-rrh-supervision.py
[lopcomm-rrh-supervision-service]
recipe = slapos.cookbook:wrapper
command-line = ${lopcomm-rrh-supervision-template:output}
wrapper-path = ${directory:service}/lopcomm-rrh-supervision
mode = 0775
hash-files =
${lopcomm-rrh-supervision-template:output}
{{ promise('lopcomm-rrh-netconf-connection') }}
promise = check_command_execute
config-command = [ -f ${directory:etc}/is_netconf_connected ]
{#- push firmware to RU #}
[lopcomm-rrh-software-template]
recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do
log-output = ${directory:var}/log/lopcomm-rrh-software.log
software-reply-json-log-output = ${directory:var}/log/lopcomm-rrh-software-reply.json.log
remote-file-path = sftp://${user-info:pw-name}@[${slap-configuration:ipv6-random}]:${sshd-port:port}{{ru_lopcomm_firmware_path}}
context =
section directory directory
section slap_configuration slap-configuration
key slapparameter_dict slap-configuration:configuration
key log_file :log-output
key software_reply_json_log_file :software-reply-json-log-output
key remote_file_path :remote-file-path
raw testing {{ slapparameter_dict.get("testing", False) }}
raw python_path {{ buildout_directory}}/bin/pythonwitheggs
raw buildout_directory_path {{ buildout_directory }}
raw etc_path ${directory:etc}
raw firmware_name {{ru_lopcomm_firmware_filename}}
import netaddr netaddr
mode = 0775
url = {{ ru_lopcomm_software_template }}
output = ${directory:script}/lopcomm-rrh-software.py
{{ promise('lopcomm-firmware') }}
promise = check_command_execute
config-command = [ -f ${directory:etc}/is_firmware_updated ]
{#- push config to RU #}
{% if slapparameter_dict.get("cu_config_link", None) %}
[cu-config-dl]
recipe = slapos.recipe.build:download
url = {{ slapparameter_dict.get("cu_config_link") }}
version = {{ slapparameter_dict.get("cu_config_version") }}
offline = false
{% endif %}
[lopcomm-cu-config]
<= config-base
{% if slapparameter_dict.get("cu_config_link", None) %}
url = ${cu-config-dl:target}
{% else %}
url = {{ ru_lopcomm_cu_config_template }}
{% endif %}
output = ${directory:etc}/cu_config.xml
[lopcomm-rrh-config-template]
recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do
log-output = ${directory:var}/log/lopcomm-rrh-config.log
context =
section directory directory
section slap_configuration slap-configuration
key slapparameter_dict slap-configuration:configuration
key log_file :log-output
raw testing {{ slapparameter_dict.get("testing", False) }}
raw python_path {{ buildout_directory}}/bin/pythonwitheggs
raw buildout_directory_path {{ buildout_directory }}
raw CreateProcessingEle_template {{ ru_lopcomm_CreateProcessingEle_template }}
key cu_config_template lopcomm-cu-config:output
import netaddr netaddr
mode = 0775
url = {{ ru_lopcomm_config_template }}
output = ${directory:script}/lopcomm-rrh-config.py
{{ promise('lopcomm-config-log') }}
promise = check_lopcomm_config_log
config-config-log = ${lopcomm-rrh-config-template:log-output}
{#- handle notifications from RU #}
[lopcomm-rrh-stats-template]
recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do
log-output = ${directory:var}/log/lopcomm-rrh-stats.log
json-log-output = ${directory:var}/log/lopcomm-rrh-stats.json.log
cfg-json-log-output = ${directory:var}/log/lopcomm-rrh-config.json.log
supervision-json-log-output = ${directory:var}/log/lopcomm-rrh-supervision.json.log
ncsession-json-log-output = ${directory:var}/log/lopcomm-rrh-ncsession.json.log
software-json-log-output = ${directory:var}/log/lopcomm-rrh-software.json.log
context =
section directory directory
section slap_configuration slap-configuration
key slapparameter_dict slap-configuration:configuration
key log_file :log-output
key json_log_file :json-log-output
key cfg_json_log_file :cfg-json-log-output
key supervision_json_log_file :supervision-json-log-output
key ncsession_json_log_file :ncsession-json-log-output
key software_json_log_file :software-json-log-output
raw testing {{ slapparameter_dict.get("testing", False) }}
raw python_path {{ buildout_directory}}/bin/pythonwitheggs
raw buildout_directory_path {{ buildout_directory }}
import netaddr netaddr
mode = 0775
url = {{ ru_lopcomm_stats_template }}
output = ${directory:bin}/lopcomm-rrh-stats.py
[lopcomm-rrh-stats-service]
recipe = slapos.cookbook:wrapper
command-line = ${lopcomm-rrh-stats-template:output}
wrapper-path = ${directory:service}/lopcomm-rrh-stats
mode = 0775
hash-files =
${lopcomm-rrh-stats-template:output}
{{ promise('lopcomm-vswr') }}
promise = check_lopcomm_vswr
config-netconf-log = ${lopcomm-rrh-stats-template:json-log-output}
{{ promise('lopcomm-rssi') }}
promise = check_lopcomm_rssi
config-netconf-log = ${lopcomm-rrh-stats-template:json-log-output}
{{ promise('lopcomm-pa-current') }}
promise = check_lopcomm_pa_current
config-netconf-log = ${lopcomm-rrh-stats-template:json-log-output}
{{ promise('lopcomm-pa-output-power') }}
promise = check_lopcomm_pa_output_power
config-netconf-log = ${lopcomm-rrh-stats-template:json-log-output}
{{ promise('lopcomm-sync') }}
promise = check_lopcomm_sync
config-netconf-log = ${lopcomm-rrh-stats-template:json-log-output}
{{ promise('lopcomm-lof') }}
promise = check_lopcomm_lof
config-netconf-log = ${lopcomm-rrh-stats-template:json-log-output}
{{ promise('lopcomm-stats-log') }}
promise = check_lopcomm_stats_log
config-stats-log = ${lopcomm-rrh-stats-template:log-output}
{%- set cell_list = slapparameter_dict.get('cell_list', {'default': {}}) %}
{%- for i, k in enumerate(cell_list) %}
{%- set sfp_port = cell_list[k].get('cpri_port_number', i) %}
{{ promise('SFP%d-cpri-lock' % sfp_port) }}
promise = check_cpri_lock
config-sdr_dev = {{ slapparameter_dict.get('sdr_number', 0) }}
config-sfp_port = {{ sfp_port }}
config-amarisoft-rf-info-log = ${amarisoft-rf-info-template:log-output}
{%- endfor %}
{#- reset RU periodically #}
{%- if slapparameter_dict.get("cron_schedule") %}
[lopcomm-rrh-reset-info-template]
recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do
log-output = ${directory:var}/log/lopcomm-rrh-reset-info.log
json-log-output = ${directory:var}/log/lopcomm-rrh-reset-info.json.log
context =
section slap_configuration slap-configuration
key log_file :log-output
key json_log_file :json-log-output
raw stats_period {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
raw testing {{ slapparameter_dict.get("testing", False) }}
raw python_path {{ buildout_directory}}/bin/pythonwitheggs
import netaddr netaddr
mode = 0775
url = {{ ru_lopcomm_reset_info_template }}
output = ${directory:bin}/lopcomm-rrh-reset-info.py
[lopcomm-rrh-reset-template]
recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do
log-output = ${directory:var}/log/lopcomm-rrh-reset.log
json-log-output = ${directory:var}/log/lopcomm-rrh-reset.json.log
context =
section slap_configuration slap-configuration
key log_file :log-output
raw python_path {{ buildout_directory}}/bin/pythonwitheggs
raw buildout_directory_path {{ buildout_directory }}
import netaddr netaddr
mode = 0775
url = {{ ru_lopcomm_reset_template }}
output = ${directory:etc}/lopcomm-rrh-reset.py
{{ part('lopcomm-reset-cron') }}
recipe = slapos.cookbook:cron.d
cron-entries = ${cron:cron-entries}
name = rrh-resest
frequency = {{ slapparameter_dict.get("cron_schedule", "") }}
command = {{ buildout_directory}}/bin/pythonwitheggs ${lopcomm-rrh-reset-template:output}
{{ part('lopcomm-reset-info-service') }}
recipe = slapos.cookbook:wrapper
command-line = ${lopcomm-rrh-reset-info-template:output}
wrapper-path = ${directory:service}/lopcomm-rrh-reset-info
mode = 0775
hash-files =
${lopcomm-rrh-reset-info-template:output}
{%- endif %}
{%- endmacro %}
# ru/sdr/buildout.cfg provides software code for handling SDR Radio Units.
[ru_sdr_libinstance.jinja2.cfg]
<= download-base
{#- Package ru/sdr/libinstance provides instance code for handling SDR Radio Units. #}
{%- macro buildout() %}
{#- nothing SDR-specific #}
{%- endmacro %}
# ru/sunwave/buildout.cfg provides software code for handling SunWave Radio Units.
[ru_sunwave_libinstance.jinja2.cfg]
<= download-base
{#- Package ru/sunwave/libinstance provides instance code for handling SunWave Radio Units. #}
{%- macro buildout() %}
{#- nothing SunWave-specific #}
{%- endmacro %}
...@@ -15,11 +15,11 @@ extends = ...@@ -15,11 +15,11 @@ extends =
../../component/dnsmasq/buildout.cfg ../../component/dnsmasq/buildout.cfg
../../component/fluent-bit/buildout.cfg ../../component/fluent-bit/buildout.cfg
../../component/openssh/buildout.cfg ../../component/openssh/buildout.cfg
ru/buildout.cfg
parts += parts +=
template template
slapos-cookbook slapos-cookbook
ncclient_common
# copy all configs by default # copy all configs by default
mme.jinja2.cfg mme.jinja2.cfg
dnsmasq.jinja2.cfg dnsmasq.jinja2.cfg
...@@ -29,8 +29,6 @@ parts += ...@@ -29,8 +29,6 @@ parts +=
ue_db.jinja2.cfg ue_db.jinja2.cfg
ue-lte.jinja2.cfg ue-lte.jinja2.cfg
ue-nr.jinja2.cfg ue-nr.jinja2.cfg
CreateProcessingEle.jinja2.xml
cu_config.jinja2.xml
sib23.jinja2.asn sib23.jinja2.asn
monitor-httpd-extra-conf monitor-httpd-extra-conf
# copy all gadget file # copy all gadget file
...@@ -57,34 +55,12 @@ output = ${buildout:directory}/template.cfg ...@@ -57,34 +55,12 @@ output = ${buildout:directory}/template.cfg
recipe = slapos.recipe.build:download recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/${:_update_hash_filename_} url = ${:_profile_base_location_}/${:_update_hash_filename_}
[ncclient_common]
<= download-base
destination = ${buildout:directory}/ncclient_common.py
[amarisoft-stats.jinja2.py] [amarisoft-stats.jinja2.py]
<= download-base <= download-base
[amarisoft-rf-info.jinja2.py] [amarisoft-rf-info.jinja2.py]
<= download-base <= download-base
[lopcomm-rrh-stats.jinja2.py]
<= download-base
[lopcomm-rrh-config.jinja2.py]
<= download-base
[lopcomm-rrh-software.jinja2.py]
<= download-base
[lopcomm-rrh-supervision.jinja2.py]
<= download-base
[lopcomm-rrh-reset-info.jinja2.py]
<= download-base
[lopcomm-rrh-reset.jinja2.py]
<= download-base
[template-enb] [template-enb]
<= download-base <= download-base
...@@ -111,10 +87,6 @@ url = ${:_profile_base_location_}/${:_buildout_section_name_} ...@@ -111,10 +87,6 @@ url = ${:_profile_base_location_}/${:_buildout_section_name_}
recipe = slapos.recipe.build:download recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/config/${:_buildout_section_name_} url = ${:_profile_base_location_}/config/${:_buildout_section_name_}
[copy-netconf-to-instance]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/netconf/${:_buildout_section_name_}
[gadget] [gadget]
recipe = slapos.recipe.template recipe = slapos.recipe.template
output = ${buildout:directory}/${:_buildout_section_name_}/renderjs.js output = ${buildout:directory}/${:_buildout_section_name_}/renderjs.js
...@@ -167,13 +139,6 @@ filename = ue-lte.jinja2.cfg ...@@ -167,13 +139,6 @@ filename = ue-lte.jinja2.cfg
<= copy-config-to-instance <= copy-config-to-instance
filename = ue-nr.jinja2.cfg filename = ue-nr.jinja2.cfg
[CreateProcessingEle.jinja2.xml]
<= copy-netconf-to-instance
filename = CreateProcessingEle.jinja2.xml
[cu_config.jinja2.xml]
<= copy-netconf-to-instance
filename = cu_config.jinja2.xml
# Download gadget files # Download gadget files
[software.cfg.html] [software.cfg.html]
<= copy-gadget-to-software <= copy-gadget-to-software
...@@ -198,6 +163,7 @@ eggs = ...@@ -198,6 +163,7 @@ eggs =
${bcrypt:egg} ${bcrypt:egg}
xmltodict xmltodict
ncclient ncclient
${lxml-python:egg}
interpreter = pythonwitheggs interpreter = pythonwitheggs
[xlte-repository] [xlte-repository]
......
...@@ -52,6 +52,3 @@ url = ${:_profile_base_location_}/${:filename} ...@@ -52,6 +52,3 @@ url = ${:_profile_base_location_}/${:filename}
[template] [template]
<= macro-template <= macro-template
output = ${buildout:directory}/template.cfg output = ${buildout:directory}/template.cfg
[versions]
plone.recipe.command = 1.1
...@@ -19,4 +19,4 @@ md5sum = 10e19df182c692b71ea552da183a0bcf ...@@ -19,4 +19,4 @@ md5sum = 10e19df182c692b71ea552da183a0bcf
[template-selenium] [template-selenium]
filename = instance-selenium.cfg.in filename = instance-selenium.cfg.in
md5sum = 2d84d5fb9306b88ef71e101acb46f684 md5sum = 8c48c7bef34dd54ab3bd94c91f2bf041
...@@ -97,28 +97,28 @@ environment = ...@@ -97,28 +97,28 @@ environment =
hostname = $${slap-configuration:ipv4-random} hostname = $${slap-configuration:ipv4-random}
[selenium-server-node-instance-firefox-52]
<= selenium-server-node-instance
capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-52:version},firefox_binary=${firefox-wrapper-52:location}
java-args = -Dwebdriver.gecko.driver=${geckodriver-0.16.1:location}
port = 7777
[selenium-server-node-instance-firefox-60] [selenium-server-node-instance-firefox-60]
<= selenium-server-node-instance <= selenium-server-node-instance
capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-60:version},firefox_binary=${firefox-wrapper-60:location} capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-60:version},firefox_binary=${firefox-wrapper-60:location}
java-args = -Dwebdriver.gecko.driver=${geckodriver-0.22.0:location} java-args = -Dwebdriver.gecko.driver=${geckodriver-0.22.0:location}
port = 7778 port = 7777
[selenium-server-node-instance-firefox-68] [selenium-server-node-instance-firefox-68]
<= selenium-server-node-instance <= selenium-server-node-instance
capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-68:version},firefox_binary=${firefox-wrapper-68:location} capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-68:version},firefox_binary=${firefox-wrapper-68:location}
java-args = -Dwebdriver.gecko.driver=${geckodriver-0.24.0:location} java-args = -Dwebdriver.gecko.driver=${geckodriver-0.24.0:location}
port = 7779 port = 7778
[selenium-server-node-instance-firefox-78] [selenium-server-node-instance-firefox-78]
<= selenium-server-node-instance <= selenium-server-node-instance
capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-78:version},firefox_binary=${firefox-wrapper-78:location} capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-78:version},firefox_binary=${firefox-wrapper-78:location}
java-args = -Dwebdriver.gecko.driver=${geckodriver-0.24.0:location} java-args = -Dwebdriver.gecko.driver=${geckodriver-0.24.0:location}
port = 7779
[selenium-server-node-instance-firefox-115]
<= selenium-server-node-instance
capabilities = browserName=firefox,maxInstances=3,marionette=true,platform=LINUX,version=${firefox-115:version},firefox_binary=${firefox-wrapper-115:location}
java-args = -Dwebdriver.gecko.driver=${geckodriver-0.33.0:location}
port = 7780 port = 7780
[selenium-server-node-instance-chromium-69] [selenium-server-node-instance-chromium-69]
...@@ -137,12 +137,10 @@ port = 7782 ...@@ -137,12 +137,10 @@ port = 7782
[selenium-server-admin-password] [selenium-server-admin-password]
recipe = slapos.cookbook:generate.password recipe = slapos.cookbook:generate.password
username = admin username = admin
bytes = 12
[selenium-server-selenium-password] [selenium-server-selenium-password]
recipe = slapos.cookbook:generate.password recipe = slapos.cookbook:generate.password
username = selenium username = selenium
bytes = 12
[selenium-server-frontnend-certificate] [selenium-server-frontnend-certificate]
...@@ -303,10 +301,10 @@ instance-promises = ...@@ -303,10 +301,10 @@ instance-promises =
$${selenium-server-frontend-listen-promise:name} $${selenium-server-frontend-listen-promise:name}
$${selenium-server-hub-listen-promise:name} $${selenium-server-hub-listen-promise:name}
$${selenium-server-hub-nodes-registered-promise:name} $${selenium-server-hub-nodes-registered-promise:name}
$${selenium-server-node-firefox-52-listen-promise:name}
$${selenium-server-node-firefox-60-listen-promise:name} $${selenium-server-node-firefox-60-listen-promise:name}
$${selenium-server-node-firefox-68-listen-promise:name} $${selenium-server-node-firefox-68-listen-promise:name}
$${selenium-server-node-firefox-78-listen-promise:name} $${selenium-server-node-firefox-78-listen-promise:name}
$${selenium-server-node-firefox-115-listen-promise:name}
$${selenium-server-node-instance-chromium-69-listen-promise:name} $${selenium-server-node-instance-chromium-69-listen-promise:name}
$${selenium-server-node-instance-chromium-91-listen-promise:name} $${selenium-server-node-instance-chromium-91-listen-promise:name}
...@@ -353,11 +351,6 @@ inline = ...@@ -353,11 +351,6 @@ inline =
sys.exit(0 if expected_node_count == actual_node_count else 1) sys.exit(0 if expected_node_count == actual_node_count else 1)
[selenium-server-node-firefox-52-listen-promise]
<= check-port-listening-promise
config-host = $${selenium-server-node-instance-firefox-52:hostname}
config-port = $${selenium-server-node-instance-firefox-52:port}
[selenium-server-node-firefox-60-listen-promise] [selenium-server-node-firefox-60-listen-promise]
<= check-port-listening-promise <= check-port-listening-promise
config-host = $${selenium-server-node-instance-firefox-60:hostname} config-host = $${selenium-server-node-instance-firefox-60:hostname}
...@@ -373,6 +366,11 @@ config-port = $${selenium-server-node-instance-firefox-68:port} ...@@ -373,6 +366,11 @@ config-port = $${selenium-server-node-instance-firefox-68:port}
config-host = $${selenium-server-node-instance-firefox-78:hostname} config-host = $${selenium-server-node-instance-firefox-78:hostname}
config-port = $${selenium-server-node-instance-firefox-78:port} config-port = $${selenium-server-node-instance-firefox-78:port}
[selenium-server-node-firefox-115-listen-promise]
<= check-port-listening-promise
config-host = $${selenium-server-node-instance-firefox-115:hostname}
config-port = $${selenium-server-node-instance-firefox-115:port}
[selenium-server-node-instance-chromium-69-listen-promise] [selenium-server-node-instance-chromium-69-listen-promise]
<= check-port-listening-promise <= check-port-listening-promise
config-host = $${selenium-server-node-instance-chromium-69:hostname} config-host = $${selenium-server-node-instance-chromium-69:hostname}
......
...@@ -75,3 +75,7 @@ post-install = ...@@ -75,3 +75,7 @@ post-install =
[firefox-78] [firefox-78]
post-install = post-install =
${symlink-extra-fonts-to-firefox-fonts-dir:install} ${symlink-extra-fonts-to-firefox-fonts-dir:install}
[firefox-115]
post-install =
${symlink-extra-fonts-to-firefox-fonts-dir:install}
...@@ -290,12 +290,12 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase): ...@@ -290,12 +290,12 @@ class TestBrowserSelection(WebServerMixin, SeleniumServerTestCase):
'Gecko/20100101 Firefox/60.0', 'Gecko/20100101 Firefox/60.0',
driver.execute_script('return navigator.userAgent')) driver.execute_script('return navigator.userAgent'))
driver.quit() driver.quit()
desired_capabilities['version'] = '52.9.0esr' desired_capabilities['version'] = '115.3.1esr'
driver = webdriver.Remote( driver = webdriver.Remote(
command_executor=webdriver_url, command_executor=webdriver_url,
desired_capabilities=desired_capabilities) desired_capabilities=desired_capabilities)
self.assertIn( self.assertIn(
'Gecko/20100101 Firefox/52.0', 'Gecko/20100101 Firefox/115.0',
driver.execute_script('return navigator.userAgent')) driver.execute_script('return navigator.userAgent'))
driver.quit() driver.quit()
...@@ -310,6 +310,12 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase): ...@@ -310,6 +310,12 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase):
parsed = urllib.parse.urlparse(admin_url) parsed = urllib.parse.urlparse(admin_url)
self.assertEqual('admin', parsed.username) self.assertEqual('admin', parsed.username)
self.assertTrue(parsed.password) self.assertTrue(parsed.password)
self.assertEqual(
requests.get(
parsed._replace(netloc=f"[{parsed.hostname}]:{parsed.port}").geturl(),
verify=False).status_code,
requests.codes.unauthorized
)
self.assertIn('Grid Console', requests.get(admin_url, verify=False).text) self.assertIn('Grid Console', requests.get(admin_url, verify=False).text)
...@@ -319,6 +325,12 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase): ...@@ -319,6 +325,12 @@ class TestFrontend(WebServerMixin, SeleniumServerTestCase):
parsed = urllib.parse.urlparse(webdriver_url) parsed = urllib.parse.urlparse(webdriver_url)
self.assertEqual('selenium', parsed.username) self.assertEqual('selenium', parsed.username)
self.assertTrue(parsed.password) self.assertTrue(parsed.password)
self.assertEqual(
requests.get(
parsed._replace(netloc=f"[{parsed.hostname}]:{parsed.port}").geturl(),
verify=False).status_code,
requests.codes.unauthorized
)
# XXX we are using a self signed certificate, but selenium 3.141.0 does # XXX we are using a self signed certificate, but selenium 3.141.0 does
# not expose API to ignore certificate verification # not expose API to ignore certificate verification
...@@ -397,19 +409,6 @@ class TestSSHServer(SeleniumServerTestCase): ...@@ -397,19 +409,6 @@ class TestSSHServer(SeleniumServerTestCase):
self.assertIn(b"Welcome to SlapOS Selenium Server.", received) self.assertIn(b"Welcome to SlapOS Selenium Server.", received)
class TestFirefox52(
BrowserCompatibilityMixin,
SeleniumServerTestCase,
ImageComparisonTestCase,
):
desired_capabilities = dict(DesiredCapabilities.FIREFOX, version='52.9.0esr')
user_agent = 'Gecko/20100101 Firefox/52.0'
# resizing window is not supported on firefox 52 geckodriver
@unittest.expectedFailure
def test_resize_window(self):
super().test_resize_window()
class TestFirefox60( class TestFirefox60(
BrowserCompatibilityMixin, BrowserCompatibilityMixin,
SeleniumServerTestCase, SeleniumServerTestCase,
...@@ -427,6 +426,7 @@ class TestFirefox68( ...@@ -427,6 +426,7 @@ class TestFirefox68(
desired_capabilities = dict(DesiredCapabilities.FIREFOX, version='68.0.2esr') desired_capabilities = dict(DesiredCapabilities.FIREFOX, version='68.0.2esr')
user_agent = 'Gecko/20100101 Firefox/68.0' user_agent = 'Gecko/20100101 Firefox/68.0'
class TestFirefox78( class TestFirefox78(
BrowserCompatibilityMixin, BrowserCompatibilityMixin,
SeleniumServerTestCase, SeleniumServerTestCase,
...@@ -436,6 +436,20 @@ class TestFirefox78( ...@@ -436,6 +436,20 @@ class TestFirefox78(
user_agent = 'Gecko/20100101 Firefox/78.0' user_agent = 'Gecko/20100101 Firefox/78.0'
class TestFirefox115(
BrowserCompatibilityMixin,
SeleniumServerTestCase,
ImageComparisonTestCase,
):
desired_capabilities = dict(DesiredCapabilities.FIREFOX, version='115.3.1esr')
user_agent = 'Gecko/20100101 Firefox/115.0'
# resizing window does not work, but we don't really depend on it
@unittest.expectedFailure
def test_resize_window(self):
super().test_resize_window()
class TestChrome69( class TestChrome69(
BrowserCompatibilityMixin, BrowserCompatibilityMixin,
SeleniumServerTestCase, SeleniumServerTestCase,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment