Blog

Kiwi TCMS 11.2

We're happy to announce Kiwi TCMS version 11.2.

IMPORTANT: This is a small release which contains several improvements, new API methods, internal refactoring and new translations! This is the first release to ship aarch64 container images!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

---

Upstream container images (x86_64):

kiwitcms/kiwi   latest  bcc4c658440a    622MB

IMPORTANT: version tagged and multi-arch container images are available only to subscribers!

Changes since Kiwi TCMS 11.1

Improvements

  • Update django from 4.0.2 to 4.0.3
  • Update django-grappelli from 3.0.2 to 3.0.3
  • Update django-simple-captcha from 0.5.14 to 0.5.17
  • Update python-bugzilla from 3.1.0 to 3.2.0
  • Update python-gitlab from 3.1.1 to 3.2.0
  • Update node_modules/prismjs from 1.26.0 to 1.27.0
  • Add new command to perform a collection of post-upgrade tasks. Kiwi TCMS admins are advised to replace manage.py migrate with manage.py upgrade (Ivajlo Karabojkov)

API

  • New API method Category.create(). Fixes Issue #2705 (Erik Heeren)
  • New API method Classification.create(). Fixes Issue #2705 (Erik Heeren)

Refactoring and testing

  • Add docker build & push automation
  • Fix Bandit exclusion rule
  • Test and build on aarch64
  • Apply auto fixes fro pre-commit.ci
  • Apply auto fixes from Deepsource
  • Update versions of several GitHub Actions
  • Use the appropriate path to package.json for Dependabot
  • Remove old Telemetry link in menu to avoid confusion

Kiwi TCMS Enterprise v11.2-mt

  • Based on Kiwi TCMS v11.2

  • Update django-ses from 2.4.0 to 2.6.0

  • Update python3-saml from 1.13.0 to 1.14.0

  • Revert "Use django.contrib.staticfiles.storage from Django==3.2.12". Instead use the implementation from latest Django version. Closes Issue #140

  • Start building kiwitcms/enterprise on aarch64

  • Add changelog check & docker release automation

  • Add test for PSA login URLs on login page. References Issue #83

  • Add SAML & Azure AD logo images

  • Update GitHub Actions

  • Hard-code testing with Keycloak 16.1.1 to workaround significant differences with Keycloak v17 container

    Private images:

    quay.io/kiwitcms/enterprise         11.2-mt (aarch64)   fe5e869e36f6    09 Mar 2022    890MB
    quay.io/kiwitcms/enterprise         11.2-mt (x86_64)    134320d5fb7c    09 Mar 2022    841MB
    quay.io/kiwitcms/version            11.2 (aarch64)      3b782830d19d    09 Mar 2022    665MB
    quay.io/kiwitcms/version            11.2 (x86_64)       bcc4c658440a    09 Mar 2022    620MB
    

IMPORTANT: version tagged, multi-arch and Enterprise container images are available only to subscribers!

How to upgrade

Backup first! Then execute the commands:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py upgrade

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

An active Kiwi TCMS subscription ensures a sustainable future for all open source software maintained by the Kiwi TCMS team and provides its holder with access to software versions and certain level services. Given recent changes to private container credentials we have refreshed our product and service definitions.

New Self Support subscription

This is an entry-level subscription which provides read-only access to version tagged containers of upstream Kiwi TCMS. It is suitable for experimentation, very small teams, development against Kiwi TCMS and convenience during upgrades.

You are free to use any older or future versions of Kiwi TCMS available from the kiwitcms/version container repository!

This subscription plan is also available via GitHub Marketplace.

Private Tenant

This is our most popular subscription type.

Starting today it also includes access to the kiwitcms/version container repository! This is suitable for teams who prefer to be hosting Kiwi TCMS on-premise instead of using the namespace provided under *.tenant.kiwitcms.org.

This subscription plan is also available via GitHub Marketplace.

Everything else remains the same!

Enterprise Subscription

This is Kiwi TCMS tailored towards on-premise deployments in larger organizations. Starting today it also automatically includes 1x Private Tenant which can be used for development or experiments.

Support availability has been extended by 2 hours in order to cover more geographic areas!

Future features coming to enterprise subscribers - tools for provisioning of Kiwi TCMS inside cloud environments and aarch64 containers.

Price has been increased to 400 $/mo.

New Managed Hosting subscription

This new offering is designed for the organizations which don't want to bother with provisioning containers, configuring DNS resolution, managing SSL certificates, regular upgrades and backups. The Kiwi TCMS team can do all of this for you and provide a fully isolated instance inside AWS.

Support availability has been extended by 2 days, covering Saturday and Sunday. When necessary Managed Hosting subscribers have the option for video conferences with their support contact.


All changes are effective immediately. Existing customers are granted access to everything that's new while billing changes are not applied.

If you prefer the "free beer" version of Kiwi TCMS it is available via docker pull kiwitcms/kiwi - free to use and without any guarantees according to GPLv2.

Please consider subscribing and help us make Kiwi TCMS better!

Happy Testing!

Kiwi TCMS subscribers had to go through a manual process of registering a username with our container registry, quay.io and email support before they could access private docker images. This process is now fully automated!

"private credentials card"

Credentials are automatically created upon subscription payment and configured for read-only access to respective repositories based on the type of subscription. You can find your credentials at the subscriptions page, PLUGINS -> Subscriptions. To authenticate try

$ docker login -u="USERNAME" -p "PASSWORD-TOKEN" quay.io
# or
$ echo "PASSWORD-TOKEN" | docker login -u="USERNAME" --password-stdin quay.io

If you would like to have access to private container repositories for Kiwi TCMS checkout the containers page and subscribe!

Happy Testing!

Kiwi TCMS 11.1

We're happy to announce Kiwi TCMS version 11.1.

IMPORTANT: This is a small release which contains security related updates, several improvements, bug fixes and new translations!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

---

Container images:

kiwitcms/kiwi       latest  72099aa8ee93    629 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

IMPORTANT: version tagged container images are available only to subscribers!

Changes since Kiwi TCMS 11.0

Security

  • Update Django from 3.2.10 to 4.0.2 to fix several fulnerabilities: CVE-2022-22818, CVE-2022-23833, CVE-2021-45115, CVE-2021-45116, CVE-2021-45452. Of those we believe that only CVE-2022-23833: Denial-of-service possibility in file uploads may directly impact Kiwi TCMS

Improvements

  • Update django-contrib-comments from 2.1.0 to 2.2.0
  • Update django-uuslug from 1.2.0 to 2.0.0
  • Update python-gitlab from 3.1.0 to 3.1.1
  • Update node_modules/marked from 4.0.10 to 4.0.12

Database

  • New migration for django-simple-captcha

Settings

  • RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY and RECAPTCHA_USE_SSL are no longer in use
  • New setting USE_CAPTCHA, defaults to True
  • The string "captcha" is added to INSTALLED_APPS

Bug fixes

  • Fix inappropriate RPC calls causing Version and Build dropdown widgets to display no values. Fixes Issue #2704

Refactoring and testing

  • Add tzdata to requirements
  • Replace django-recaptcha with django-simple-captcha
  • Adjust /init-db view to reliably detect when applying database migrations is complete and not exit prematurely

Translations

Kiwi TCMS Enterprise v11.1-mt

  • Based on Kiwi TCMS v11.1

  • Update kiwitcms-github-app from 1.3.2 to 1.3.3

  • Update django-ses from 2.3.1 to 2.4.0

  • Update python3-saml from 1.12.0 to 1.13.0

  • Workaround UnicodeDecodeError while building the docker image

    Private images:

    quay.io/kiwitcms/enterprise         11.1-mt         df5ce509fd41   854 MB
    quay.io/kiwitcms/version            11.1            72099aa8ee93   629 MB
    

IMPORTANT: version tagged and Enterprise container images are available only to subscribers!

How to upgrade

Backup first! Then execute the commands:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS 11.0

We're happy to announce Kiwi TCMS version 11.0.

IMPORTANT: This is a new major release which contains security related updates, several improvements, API changes, bug fixes and new translations!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

---

Container images:

kiwitcms/kiwi       latest  6600bc56a544    622 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

IMPORTANT: version tagged container images are available only to subscribers!

Changes since Kiwi TCMS 10.5

Improvements

  • Update Django to 3.2.11
  • Update django-colorfield from 0.4.5 to 0.6.3
  • Update django-grappelli from 2.15.3 to 3.0.2
  • Update psycopg2 from 2.9.2 to 2.9.3
  • Update pygments from 2.10.0 to 2.11.2
  • Update python-gitlab from 2.10.1 to 3.1.0
  • Update node_modules/prismjs from 1.25.0 to 1.26.0
  • Update node_modules/marked from 2.1.3 to 4.0.10
  • Admin panel now allows to view, add, edit and delete Environment records
  • Allow selection of environment when creating new TestRun and display the chosen values inside the TestRun page. Closes Issue #1344
  • Creating a TestRun will now generate test execution matrix based on the available environment and test case properties. Closes Issue #1843
  • When generating a test execution matrix the supported algorithms are "full" and "pairwise". Closes Issue #1931
    • Feature is enabled for test runs which contain test cases. This feature is not shown when creating an empty test run
    • This feature isn't supported when subsequently adding new test cases to test run
  • Record a random hex number under /Kiwi/uploads/installation-id

Detailed information about properties, environments and test matrix generation can be found in a separate article.

Database

  • New model testrun.Environment
  • New model testrun.EnvironmentProperty
  • New model testrun.Property

Warning:

These newly added models create additional permission labels with names testruns | environment | Can .... environment, testruns | property | Can .... property, testruns | environment property | Can .... environment property

Execute manage.py refresh_permissions and/or assign them manually to users and groups if they should be able to interact with the new objects!

Settings

  • Update the value of MODERNRPC_METHODS_MODULES setting to include modules with the new API methods

API

  • Method TestRun.add_case will now return a list.

    Warning

    This breaks API compatibility with older versions and will break all plugins which rely on this method. Use plugins v11 or greater!

  • Method TestRun.add_case return value will now include a field named properties

  • New methods Environment.properties, Environment.add_property and Environment.remove_property

  • New method TestRun.properties

Bug fixes

  • Send e-mail notification when adding comments to bugs. Fixes Issue #2232 (@cmbahadir)
  • Disable the "+" button when there is no related element selected. Fixes Issue #2561 (@cmbahadir)
  • When cloning test plans keep the existing test case sort order inside the resulting test plan. Fixes Issue #2218 (Nicolas Gelot)
  • Configure en_US.UTF-8 locale inside container. Allows upload of files with unicode names. Fixes Issue #2600

Refactoring and testing

  • Refresh logo design
  • Pylint fixes
  • Pin setuptools b/c of problem with django-extensions
  • Remove redundant test scenario
  • Shell script refactoring

Kiwi TCMS Enterprise v11.0-mt

  • Based on Kiwi TCMS v11.0

  • Update kiwitcms-tenants from 1.8.0 to 1.11.0

    Private images:

    quay.io/kiwitcms/enterprise         11.0-mt         a730291750f8   846 MB
    quay.io/kiwitcms/version            11.0            6600bc56a544   622 MB
    

IMPORTANT: version tagged and Enterprise container images are available only to subscribers!

How to upgrade

Backup first! Then execute the commands:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

The upcoming Kiwi TCMS v11 contains new functionality around TestCase parameters and TestRun environments which has an impact on how your final test execution matrix will look like. This article provides detailed information about these features but have in mind that they are still considered to be a technology-preview.

Parameters

Consider a login functionality which accepts email address and password. Possible states for these fields are:

  • Email address:

    • valid - well formed email string, exists in database, access is allowed
    • invalid - malformed email string, should not exist in the DB but this fact is not relevant to the test
    • disabled - well formed email string, exists in database, access is not allowed
  • Password:

    • correct - matches the value in database for the given email address
    • another - matches the value in database which is related to another email address
    • wrong - doesn't match the value in database
    • empty - value is empty string, a special case of wrong
    • invalid - value doesn't conform to predefined rules. May or may not be relevant to login functionality

Depending on how the software under test is put together you can design multiple test cases. Fundamentally however these are the same test case and the above states are input parameters to it!

Definition: TestCase parameters are different input values which do not fundamentally affect the result of a test case! A TestCase with parameters will result into multiple test executions!

In other words you will be executing a parameterized test scenario multiple times with different input values! Inside Kiwi TCMS the actual parameter values during execution are recorded into the TestExecution model which will not change if you modify test case parameter values afterwards!

Definition: TestExecution parameters record a snapshot of TestCase parameters at the time when you intended to execute a particular test scenario!

Environments

A testing environment represents the specifics of where exactly you executed your test suite. Consider this example:

The default desktop environment of Fedora is GNOME, but if you prefer an alternative, you can download installation media which contains slightly differently defaults, e.g. KDE, Xfce, MATE and others, see https://spins.fedoraproject.org.

Regardless of which Fedora variant you choose the expected functionallity of the default desktop experience is the same. However this can only be guaranteed with exhaustive testing across all variants. Check-out the test matrix at https://fedoraproject.org/wiki/Test_Results:Fedora_36_Rawhide_20220118.n.0_Desktop?rd=Test_Results:Current_Desktop_Test#Non_release-blocking_desktops:_x86_.2F_x86_64

Definition: a TestRun environment is a set of attributes which apply to the entire test suite at the time of execution. Usually you expect test results in different environments to be the same!

In Kiwi TCMS environments are represented as named containers of key/value pairs. The same key may have multiple values! They can be found under ADMIN -> Everything else -> Environments.

Because environments are meant to affect the entire test suite they are linked to the TestRun model. When creating a new test run you can select multiple Environment records.

Test matrix generation

The existing behavior in Kiwi TCMS is that when a test run is created there will be only one test execution for every test case which is added inside this test run.

In the Fedora example shown above some of the test cases also have their own parameters, e.g. the QA:Testcase_desktop_app_basic scenario.

Definition: TestRun environment key/values will be combined with TestCase parameter key/values to form the final test matrix! This opens up the possibility for combinatorial test execution generation.

Once parameters and environment(s) are specified you will start seeing multiple test executions for the same test case inside newly created test runs. By default a full-combination test matrix will be created. The other option is to pairwise all key/value records.

Important: test execution generation works only when creating or cloning a test run that contains test cases. This feature still does not work for test cases added after a test run is created!

Environment(s) vs Tag(s)

Inside Kiwi TCMS you can use both environments and tags to annotate test runs. There are 3 important facts that hold true:

  • Tags possess only informational value, they don't influence how you perform testing;
  • Environments possess informational value and govern the final test matrix;
  • Environments which have a single value for each different key are the same as tags!

"Example from #1344"

If we look at this example from Issue #1344 we can make out the following keys:

  • Driver - 2 values
  • API - 2 values
  • Python - 2 values
  • Java - 1 value
  • Eclipse - 1 value
  • Host OS - 1 value
  • Target OS - 1 value
  • Redistributable - 1 value
  • Testing Type - 1 value

Here Driver, API and Python clearly should affect your test matrix. Otherwise there isn't much point in having the different values recorded in the first place. That results in a 8x multiplication factor for every functionality that may be affected/related to these attributes, presumably the entire functionality of the product under test.

Java, Eclipse, Host OS and Target OS carry only informational value but they look like more values could be possible. If that's the case these attributes will also affect the overall test matrix.

Redistributable and Testing Type look like information-only attributes. They don't appear to have any relevance to the test matrix at all. The same information-only effect can be achieved both with environments and with tags.

Practical rules:

  1. Attributes which affect a single test case should be defined as TestCase parameters
  2. Attributes which affect all test cases in a suite should be defined as TestRun environment(s)
  3. One big TestRun is likely the best from organizational and optimizational point of view

You may decide to have multiple smaller test runs, usually with 1 value per environment key, if you think that fits your workflow better. However you may be missing on some optimizations if you choose to do so.

Real life example

To illustrate how all of these new features work let's look at Partitioning custom software RAID test case from Fedora QA. It instructs the tester to install Linux and inside the partitioning screen create a Software RAID partition, format it with a filesystem and assign a mount point! It is expected that once installation is complete the machine will reboot, tester will be able to login as root and the created filesystem will be available!

Factors that could affect this functionality:

  • Raid Level: Fedora supports 7 of them - 0, 1, 4, 5, 6, 10 and linear. These are all different drivers located under /lib/modules/$(uname -r)/kernel/drivers/md

    ./linear.ko.xz
    ./raid0.ko.xz
    ./raid10.ko.xz
    ./raid1.ko.xz
    ./raid456.ko.xz
    
  • Mount Point: / for example is mounted very early in the boot process, /home is mounted much later. / also relates to rescue mode, while /home doesn't. /home, if corrupted, may affect the terminal login process though

  • Encryption: Yes/No. This is stackable on top of the RAID device and "should-just-work". However it is often included into other partitioning test cases in order to discover weird issues and because it is a critical functionality

We may add the actual filesystem type, used to format the RAID block device, e.g. xfs, ext3, ext4, but that's not needed here! Here's how this test case looks in Kiwi TCMS:

"RAID test case"

Remember that Fedora comes with multiple variants for multiple CPU architectures! Of those we'll consider Server and Workstation, which are both available for the aarch64 and x86_64 CPU architectures. Here's how this can be represented inside Kiwi TCMS:

"Fedora variants represented as environment"



Next we need to organize test execution for an upcoming release by creating test run(s) and selecting environment and matrix generation type: "New test run with environment"

The possible outcomes are:

  • 112 test executions: full test matrix between all Fedora variants and all RAID parameters
  • 56 test executions: 4 TR x 14 TE; one TR/variant without environment; RAID parameters are pairwised
  • 16 test executions: all Fedora variants are pairwised together with all RAID parameters

Finally this is how the resulting test run looks like. Notice the 3 boxes icon for each test execution, listing the actual parameters which should be used during testing:

"TR with environment, TE with parameters"

Environment parameters are read-only here b/c they have been copied to all test execution records. It usually doesn't make sense to modify your environment mid-way during test execution. If that's needed or you've made a mistake it's probably easier to create a new test run.

Happy Testing!


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS Enterprise 10.5.1

We're happy to announce Kiwi TCMS Enterprise version 10.5.1!

IMPORTANT: this is a small release which contains minor improvements and bug-fixes.

You can explore everything at https://public.tenant.kiwitcms.org!

Kiwi TCMS Enterprise v10.5.1-mt

  • Based on Kiwi TCMS v10.5

  • Update django-python3-ldap from 0.13.0 to 0.13.1

  • Update kiwitcms-github-app from 1.3.1 to 1.3.2

    Private images:

    quay.io/kiwitcms/enterprise         10.5.1-mt       c4d745bd914c   806MB
    

IMPORTANT: version tagged and Enterprise container images are available only to subscribers!

How to upgrade

Backup first! Then execute the commands:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS is pleased to announce new versions of our plugins for different test automation frameworks:

The new versions are future compatible with upcoming Kiwi TCMS v11 and also with existing Kiwi TCMS v10.x installations. Check-out the pages above for individual instructions.

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

"Cfp banner"

Attention testers! On behalf of Testing and Automation devroom we'd like to announce that call for participation is now open.

Here are some ideas for topics that are a good fit for this devroom:

Testing in the real, open source world

  • War stories/strategies for testing large scale or complex projects
  • Demystify resource e.g. systems/device/cloud provisioning in a CI loop
  • Tools that extend the ability to test low-level code, e.g. bootloaders, init systems, etc.
  • Projects that are introducing new/interesting ways of testing "systems"
  • Address the automated testing frameworks fragmentation
  • Lessons learned from testing

Cool Tools (good candidates for lightning talks)

  • How your open source tool made developing quality software better
  • What tools do you use to setup your CI/CD
  • Combining projects/plugins/tools to build amazing things "Not enough people in the open source community know how to use $X, but here's a tutorial on how to use $X to make your project better."

In the past the devroom has seen both newbies/students and experienced professionals and past speakers as part of the audience and talks covering from beginner/practical to advanced/abstract topics. If you have doubts then submit your proposal and leave a comment for the devroom managers and we'll get back to you.

Checkout https://fosdem-testingautomation.github.io/ for more information!

Happy Testing!


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS 10.5

We're happy to announce Kiwi TCMS version 10.5 which celebrates the very positive reception we had at WebSummit 2021!

IMPORTANT: this is a medium sized release which contains various improvements and new features, database changes, new settings and API methods, bug-fixes, internal refactoring and updated translations.

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

---

Container images:

kiwitcms/kiwi       latest  0574b19b5d66    583 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

IMPORTANT: version tagged container images are available only to subscribers!

Changes since Kiwi TCMS 10.4

Improvements

  • Update django from 3.2.7 to 3.2.9
  • Update django-colorfield from 0.4.3 to 0.4.5
  • Update django-extensions from 3.1.3 to 3.1.5
  • Update django-grappelli from 2.15.1 to 2.15.3
  • Update django-tree-queries from 0.6.0 to 0.7.0
  • Update jira from 3.0.1 to 3.1.1
  • Update markdown from 3.3.4 to 3.3.6
  • Update mysqlclient from 2.0.3 to 2.1.0
  • Update psycopg2 from 2.9.1 to 2.9.2
  • Display a warning if connection doesn't use HTTPS (Ivajlo Karabojkov)
  • Account registration page can be turned on/off via settings. Fixes Issue #2500
  • TestCase Search page can now filter by TestPlan. Fixes Issue #2283
  • Allow template selection when creating new test case. Fixes Issue #957
  • TestCase page now allows specification of properties, e.g. mobile devices on which the test should be executed. This feature serves as a building block for Issue #1843, Issue #1931 and Issue #1344 but isn't active anywhere else inside Kiwi TCMS at the moment
  • TestExecution properties will be displayed inside TestRun page if they have been specified
  • Rearrange help-text in admin page for better visibility
  • Switch to official Postgres image from Docker Hub
  • Switch to official MariaDB image from Docker Hub

Warning:

For Postgres data dir changed from /var/lib/pgsql/data to /var/lib/postgres/data. Environment variables inside docker-compose file changed as well, see docker-compose.postgres.

For MariaDB data dir changed from /var/lib/mysql/data to /var/lib/mysql. MYSQL_CHARSET & MYSQL_COLLATION environment variables are no longer recognized. Instead they are present as command line options passed to the container, see docker-compose.yml. Previous workaround for these variables was also removed.

If you want to migrate from the previous centos/mariadb-103-centos7 or centos/postgresql-12-centos7 containers to mariadb:latest and postgres:latest make sure to update your container control files!

Settings

  • New setting REGISTRATION_ENABLED, default True, Can be controlled via environment variable KIWI_REGISTRATION_ENABLED. When set to False will disable account registration page

Database

  • New model testcases.Property
  • New model testcases.Template
  • New model testruns.TestExecutionProperty
  • Remove unique_together constraint for testruns.TestExecution model. This makes it possible to add multiple executions for the same test case in the same test run

Warning:

These newly added models create additional permission labels with names testcases | template | Can .... template, testcases | property | Can .... property, testruns | test execution property | Can .... test execution property

Execute manage.py refresh_permissions and/or assign them manually to users and groups if they should be able to interact with the new objects!

API

  • Method TestCase.filter() now returns additional fields setup_duration, testing_duration, expected_duration - all serialized in seconds. Refs Issue #1923 (Mfon Eti-mfon)
  • Method User.filter() will no longer return fields groups, user_permissions, date_joined and last_login
  • New method TestExecution.properties()
  • New method TestCase.properties()
  • New method TestCase.add_property()
  • New method TestCase.remove_property()

Bug fixes

  • Unify tab size & tab indentation b/w Python & SimpleMDE. Fixes Issue #1802
  • Use sane_list extension for rendering consecutive lists in markdown. Closes Issue #2511

Warning:

The visual markdown editor explicitly didn't follow markdown syntax rules by allowing indentation with 2 spaces and treating tabs as 2 spaces as well. See "Indentation/Tab Length" at https://python-markdown.github.io/#differences

The backend markdown rendering engine explicitly followed an undefined behavior which happens to be different from what the visual markdown editor does. See "Consecutive Lists" at https://python-markdown.github.io/#differences

The previous 2 changes make sure the visual editor and backend rendering engine follow the same rules. This may result is "broken" display of existing text which doesn't follow the markdown syntax rules. If you spot such text just edit to make it render the way you wish.

  • Fix broken URL and minor updates to documentation
  • Update GitLab tracker integration documentation to avoid confusion. Closes Issue #2559
  • Limit tag input length to 255 characters. Closes Issue #2176
  • Make error notifications in Admin to display with red color
  • Select only visible rows for bulk-update in TestRun page. Fixes Issue #2222
  • Remove Cache-Control header from httpd. Closes Issue #443

Refactoring and testing

  • Add permissions test for add-hyperlink-bulk menu. Closes Issue #716
  • Add explicit tests for issue tracker integration with GitLab.com
  • Tests teardown - remove comments & close issues on GitLab.com
  • Add missing rlPhaseEnd for docker tests
  • Multiple pylint and eslint fixes

Translations

Kiwi TCMS Enterprise v10.5-mt

  • Based on Kiwi TCMS v10.5

  • Update django-python3-ldap from 0.12.0 to 0.12.1

  • Update django-ses from 2.3.0 to 2.3.1

  • Update kiwitcms-tenants from 1.7.0 to 1.8.0

    Private images:

    quay.io/kiwitcms/enterprise         10.5-mt         3e597c91d057   804 MB
    quay.io/kiwitcms/version            10.5            0574b19b5d66   583 MB
    

IMPORTANT: version tagged and Enterprise container images are available only to subscribers!

How to upgrade

Backup first! Then execute the commands:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS subscription guidelines

An active subscription provides you with certain guarantees that your organization will continue to extract value from Kiwi TCMS and is your buy-in into the open source world. We recommend that customers purchase a subscription for every container running Kiwi TCMS however this becomes distorted for teams who don't actively seek support and large organizations! Here are our guidelines.

Phase of deployment

Casual exploration: No subscription required. Use https://public.tenant.kiwitcms.org to explore Kiwi TCMS and formulate your questions and further plan of action.

Serious evaluation or Proof of concept: 1x Private Tenant SaaS or 1x Enterprise. You will have lots of questions during this period and you will need answers in a timely manner. You can cancel at any time!

Pilot: 2-3x Private Tenant SaaS or 1x Enterprise during the pilot period. Consider add-on services if you need data migration or custom development for a successful pilot. Plan your future needs and issues you'd like to see fixed.

Production: make your decision according to the size of your test team and anticipated support needs, see below.

Our mission is to transform the testing process inside your organization. You don't have to do it alone! Let us help you!

Number of testers

<= 25: 1x Private Tenant SaaS

25-100: 2-5x Private Tenant SaaS; consider splitting teams and purchase a subscription for each of them

100 - 200: 1x Enterprise; consider additional subscriptions of any kind for non-production instances

200 - 500 - 2-3x Enterprise; consider additional subscriptions of any kind for non-production instances

500 - 1000: - 5x Enterprise; consider additional Enterprise subscriptions for non-production instances

Over 1000: 10x Enterprise; consider add-on services for custom development

Note that these are not hard rules as we don't restrict the number of accounts registered into a specific instance nor how many containers you deploy!

--

Note that you can still deploy Kiwi TCMS with a 1x subscription inside organization with thousands of testers. Or even no subscription at all. Do you really value your testing infrastructure that low though?

Ready ? Explore subscriptions!


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Venue map

We're happy to announce that Kiwi TCMS will host an exhibition stand at WebSummit 2021 in Lisbon. You can find us on Wednesday, November 03, Stand number: A 407, Industry category: Pavilion 3, ALPHA 4.

black boxes

At the exhibition stand you will have the opportunity to perform some real black-box testing, learn about Salience bias, Peltzman effect and Wason's experiments and take a photo with our lovely mascot.

The Kiwi TCMS team will be there to answer all of your questions regarding open source, community, support, various integrations and the differences between Free, SaaS and Enterprise subscriptions!

If you still need more convincing check-out our WebSummit SHOWCASE video and how QGIS organizes their testing with Kiwi TCMS.

Fun fact: adoption of Kiwi TCMS is lead by Alexandre Neto - a QGIS community member from Portugal.


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Here are the winners of our ticket giveaway:

  • Martin Ayvazov
  • Ralitsa Georgieva
  • Teodora Pashina - Dimitrova
  • Gabriela Luhova
  • Lyuboslava Arshinkova
  • Yoan Bachev

Attention winners: please get in touch with us at info@kiwitcms.org to claim your tickets. We will ask you to validate your GitLab account by performing a quick action which will be disclosed to you via email!

Raw data from our winner selection script below:

***** WINNER #1: Martin Ayvazov
{'avatar_url': 'https://secure.gravatar.com/avatar/eea811553e2b8aa3dd7ef670c3cd3552?s=80&d=identicon',
 'id': 9640539,
 'name': 'Martin Ayvazov',
 'state': 'active',
 'username': 'majvazov',
 'web_url': 'https://gitlab.com/majvazov'}
***** WINNER #2: Ralitsa Georgieva
{'avatar_url': 'https://secure.gravatar.com/avatar/43aa50437fc245766bc3e6072777c056?s=80&d=identicon',
 'id': 9869926,
 'name': 'Ralitsa Georgieva',
 'state': 'active',
 'username': 'ralitsa.georgieva',
 'web_url': 'https://gitlab.com/ralitsa.georgieva'}
***** WINNER #3: Teodora Pashina - Dimitrova
{'avatar_url': 'https://secure.gravatar.com/avatar/beca49c67ce9862a8ecb8deff94780a7?s=80&d=identicon',
 'id': 9869893,
 'name': 'Teodora Pashina - Dimitrova',
 'state': 'active',
 'username': 'tedi.pashina',
 'web_url': 'https://gitlab.com/tedi.pashina'}
***** WINNER #4: Gabriela Luhova
{'avatar_url': 'https://secure.gravatar.com/avatar/92e863a1e3df1122cc0beb2477a375be?s=80&d=identicon',
 'id': 9641952,
 'name': 'Gabriela Luhova',
 'state': 'active',
 'username': 'gabriela.luhova',
 'web_url': 'https://gitlab.com/gabriela.luhova'}
***** WINNER #5: Lyuboslava Arshinkova
{'avatar_url': 'https://secure.gravatar.com/avatar/1e0a308ddbe3b8ab9660ec7702fa0d6d?s=80&d=identicon',
 'id': 9869399,
 'name': 'Lyuboslava Arshinkova',
 'state': 'active',
 'username': 'arshinkovalyuboslava',
 'web_url': 'https://gitlab.com/arshinkovalyuboslava'}
***** WINNER #6: Yoan Bachev
{'avatar_url': 'https://gitlab.com/uploads/-/system/user/avatar/7630581/avatar.png',
 'id': 7630581,
 'name': 'Yoan Bachev',
 'state': 'active',
 'username': 'yobachev',
 'web_url': 'https://gitlab.com/yobachev'}

Video recording of the selection process:


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS 10.4

We're happy to announce Kiwi TCMS version 10.4!

IMPORTANT: this is a small release which includes several improvements, bug fixes, internal refactoring and updated translations. It is the thirteenth release to include contributions via our open source bounty program!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Container images:

kiwitcms/kiwi       latest  10eb8f04cccd    590 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 10.3

Security

Improvements

  • Update bleach from 4.0.0 to 4.1.0
  • Update django from 3.2.6 to 3.2.7
  • Update django-colorfield from 0.4.2 to 0.4.3
  • Update pygithub from 1.54.1 to 1.55
  • Update pygments from 2.9.0 to 2.10.0
  • Update python-gitlab from 2.10.0 to 2.10.1
  • Allow filtering by TestRun ID in Test Case Search page
  • Update test execution prefix in list of executions on TestRun page. Now includes both TE and TC numbers before the summary link
  • Allow search by translated names on Test Run page
  • Redirect "ADMIN -> Users and groups" menu item according to tenancy
  • Allow creation of new test run from selected test cases inside existing test run. For example only select cases which are currently failing and re-test against a different build!
  • The initial_setup command will create a schema called "empty" when executed inside a multi-tenant setup. Refs Issue #127

Settings

  • Update values for MODERNRPC_HANDLERS setting
  • Rename SafeJSONRPCHandler to KiwiTCMSJsonRpcHandler
  • New RPC handler class KiwiTCMSXmlRpcHandler

Warning

If you had manipulated the value of MODERNRPC_HANDLERS make sure that you update to the new class names!

Database

  • New migrations for altered meta options

API

  • TestCase.create method accepts setup_duration and testing_duration fields. Refs Issue #1923 (Mfon Eti-mfon)
  • TestCase.update method acepts setup_duration and testing_duration fields. Refs Issue #1923 (Mfon Eti-mfon)
  • New method Testing.individual_test_case_health
  • Timedelta values are serialized to float, representing seconds

Bug fixes

  • Fix wrong URL parameter passed to test cases clone page
  • Show translated execution statuses for TestRun page. Closes Issue #1966
  • Properly initialize Product value on TestRun Edit page. Closes Issue #2514
  • Clone duration fields when cloning a test case

Refactoring and testing

  • New automated test scenario for kiwi_auth.admin (Mariyan Garvanski)
  • Unify similar strings to reduce translations burden
  • Inside buildroot PyNaCl needs make in order to build a wheel package
  • Adjust values for parametrized test to match existing scenarios
  • Fix code smells from newer pylint
  • eslint fixes for the JavaScript files

Kiwi TCMS Enterprise v10.4.1-mt

  • Based on Kiwi TCMS v10.4
  • Update django-ses from 2.2.1 to 2.3.0
  • Update kiwitcms-github-app from 1.3.0 to 1.3.1
  • Update python3-saml from 1.11.0 to 1.12.0
  • Update social-auth-app-django from 4.0.0 to 5.0.0
  • Use initial_setup during testing. Closes Issue #88
  • Fix new pylint issues and start using f-strings
  • Test "ADMIN -> Users and Groups" menu redirect

IMPORTANT: Kiwi TCMS Enterprise container images are available only to subscribers!

How to upgrade

Backup first! If you are using Kiwi TCMS as a container then:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS is happy to announce that our first post-COVID live presence will be at WebSummit 2021, Nov 1-4 in Lisbon, Portugal. We're joining as a featured startup as part of the ALPHA program in category Enterprise Software Solutions.

Kiwi TCMS will have an on-site presence during the exhibition (1 day) where you can easily find us. We've also applied to the Startup Showcase track where you can see Alex present on stage. In addition, if all goes well our team will be joined by Alexandre Neto of QCooperative who is leading the effort to adopt Kiwi TCMS for testing the QGIS open source project. More on that here.

Exact schedules are still unknown at this stage so you will have to ping us via email/Twitter or find us on the conference floor if you want to meet.

Below is our video submission to the organizers:


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

MLH Nomination

Last year Kiwi TCMS started partnering with the MLH Fellowship open source program. During the span of 3 semesters fellows received mentorship and career advice from us. They were also able to work on 20+ issues the majority of which have been complete.

For that we kindly ask the open source community to nominate Kiwi TCMS at the MLH Open Source Awards.

Steps to reproduce:

  1. Go to https://fellowship.mlh.io/opensourceawards
  2. Click the Submit a Nomination button
  3. Follow the instructions on screen!

Expected results:

  1. It should take you 2 minutes
  2. Your submission is recorded by MLH

Why are we doing this

MLH is recognizing extraordinary open source projects and communities. It is up to you, our community members and the general public to decide whether Kiwi TCMS qualifies or not. Winning this award will let us show what we do before a larger audience!

Thank you for supporting Kiwi TCMS and happy testing!


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

HackConf is one of the premium developer conferences in Bulgaria. Over the years Kiwi TCMS and HackConf have collaborated multiple times and our history goes way back to before the first edition of the conference! We're happy to announce that Kiwi TCMS will be giving away 6 SUPERFAN tickets for HackConf 2021 in order to celebrate their 6th anniversary!

All 6 tickets include:

  • Conference live stream access (online due to COVID-19), sessions are in English
  • Ability to ask questions during the live stream
  • Virtual Goodie Bag with valuable content & digital treats
  • Special Physical Goodie Bag delivered to your home. ** Shipping is available only for the territory of Bulgaria.

How to win a ticket

We need your support in order to become part of GitLab's open source family! We kindly ask you to upvote the first comment at https://gitlab.com/gitlab-org/gitlab/-/issues/334558!

Scenario: help Kiwi TCMS become part of GitLab’s open source family
    Given: navigate your browser to http://tinyurl.com/KiwiTCMS
    And: log into GitLab via the "Sign in / Register" button
    And: complete the login / registration process
    When: click the πŸ‘ icon under the first comment
    Then: wait for the winners to be announced!

"GitLab steps"

Thank you very much and Happy Testing!

Winners announcement

Winners will be selected from all voters, excluding Kiwi TCMS team members, HackConf organizers and GitLab affiliated accounts. The accounts which have participated can be verified with curl https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/issues/334558/participants.

Winners will be announced on Oct 6th 2021 in a blog post on our website. We will try our best to get in touch with all winners but we also ask you to get in touch with us if you see your username!


If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS 10.3

We're happy to announce Kiwi TCMS version 10.3!

IMPORTANT: this is a small release which includes several improvements, bug fixes, internal refactoring and updated translations. It is the twelveth release to include contributions via our open source bounty program!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Container images:

kiwitcms/kiwi       latest  bd28c4b064f5    579 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 10.2

Improvements

Bug fixes

  • Fix a bug where drop-down selectors for test plans would not show any values when product is changed. Fixes Issue #2467

Refactoring and testing

Kiwi TCMS Enterprise v10.3-mt

  • Based on Kiwi TCMS v10.3
  • Container image based on Red Hat Universal Base Image
  • Update django-ses from 2.1.1 to 2.2.1
  • Update python3-saml from 1.10.1 to 1.11.0
  • Add GitLab login icon

IMPORTANT: Kiwi TCMS Enterprise container images are available only to subscribers!

How to upgrade

Backup first! If you are using Kiwi TCMS as a container then:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS 10.2

We're happy to announce Kiwi TCMS version 10.2!

IMPORTANT: this is a small release including upgrades to 3rd party libraries (including security related updates), several improvements and bug fixes. It is the eleventh release to include contributions via our open source bounty program!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  71b5c2a3dee4    972 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 10.1

Improvements & security updates

  • Update django from 3.2.3 to 3.2.5
  • Update django-guardian from 2.3.0 to 2.4.0
  • Update django-tree-queries from 0.5.1 to 0.5.2
  • Update psycopg2 from 2.8.6 to 2.9.1
  • Update python-gitlab from 2.7.1 to 2.9.0
  • Update node_modules/marked from 2.0.3 to 2.1.3
  • Update node_modules/html5sortable from 0.11.1 to 0.13.2
  • Update node_modules/prismjs from 1.23.0 to 1.24.1
  • Multiple select for filters on Telemetry pages. Fixes Issue #1940 (Shantanu Verma + Alex Todorov)
  • Allow editting TestCase setup_duration & testing_duration fields. References Issue #1923 (@APiligrim + Alex Todorov)
  • Move several checks to Dashboard page instead of performing them on every request (Ivajlo Karabojkov)
  • Fix grammatical error in documentation (Kushal Beniwal)
  • Add health check for Issue Tracker configuration. Fixes Issue #97
  • Document API URL field for Jira integration. Closes Issue #2443

Settings

  • tcms.core.middleware.CheckSettingsMiddleware has been removed
  • tcms.core.middleware.CheckUnappliedMigrationsMiddleware has been removed

API

  • Method Version.filter() now returns new field called product__name
  • Method Build.filter() now returns new field called version__value
  • Methods Build.filter(), Version.filter() and TestPlan.filter() will now order their results by product/version and then id.
  • Method Telemetry.breakdown() now returns only distinct results

Bug fixes

  • Make error messages in admin forms more legible. Fixes Issue #2404
  • Large images will now fit into the available space on the screen, e.g. inside test case description cards. Fixes Issue #2220

Refactoring and testing

  • Add automated tests for missing coverage in kiwi_auth.admin References Issue #1607 (Mariyan Garvanski)
  • Apply eslint fixes (@sonyagennova + Alex Todorov)
  • Refactor TestExecution.add_link method to use ModelForm and extend tests. Closes Issue #1327 (Rosen Sasov + Alex Todorov)
  • Use context manager when opening files to make pylint happier
  • Simplify 2 UI buttons on TestRun page
  • Enable doc8 for README and CHANGELOG and fix formatting errors

Kiwi TCMS Enterprise v10.2-mt

  • Based on Kiwi TCMS v10.2
  • Update django-ses from 2.0.0 to 2.1.1
  • Update django-python3-ldap from 0.11.4 to 0.12.0
  • Update documentation around initial config

IMPORTANT: Kiwi TCMS Enterprise container images are available only to subscribers!

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Kiwi TCMS Enterprise 10.1.1-mt

We're happy to announce Kiwi TCMS Enterprise version 10.1.1-mt!

IMPORTANT: this release includes support for authentication via Keycloak and support for enabling read-only view of tenants data for anonymous users.

Docker images:

quay.io/kiwitcms/enterprise       10.1.1-mt   d61e243dc4f5   1.19GB

Changes since Kiwi TCMS Enterprise 10.1-mt

  • Based on Kiwi TCMS v10.1
  • Fix URL to Python Social Auth documentation
  • Support read-only view on tenants for anonymous users. Contains a database migration to rename on_trial field to publicly_readable
  • Document initial configuration. Site administrators should add the tenants.change_tenant permission to users/groups who are allowed to make their tenants publicly visible. Fixes Issue #87, references Issue #88
  • Document the build process. Fixes Issue #89
  • Verify support for Keycloak logins. Fixes Issue #86
  • Update kiwitcms-github-app from 1.2.4 to 1.3.0
  • Update kiwitcms-tenants from 1.5.0 to 1.6.0

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker-compose pull
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Refer to our documentation for more details!

Happy testing!

---

If you like what we're doing and how Kiwi TCMS supports various communities please help us!

Newer Posts

Page 3 / 9

Older Posts