Search test library by skills or roles
⌘ K

About the test:

The DevOps Test is a scenario-based online test designed to assess a candidate's proficiency in working with Linux, Git, Python, Docker and DevOps skills.

Covered skills:

  • Git basics
  • Git branching models
  • Docker images and networking
  • Shell scripting
  • Python fundamentals
  • Python OOP
  • Python Coding
  • Git workflows
  • Docker containers and volumes
  • Linux commands
  • File system management
  • Scripting and web scraping
  • Data Structures

9 reasons why
9 reasons why

Adaface DevOps Assessment Test is the most accurate way to shortlist DevOps Engineers



Reason #1

Tests for on-the-job skills

The DevOps Test helps recruiters and hiring managers identify qualified candidates from a pool of resumes, and helps in taking objective hiring decisions. It reduces the administrative overhead of interviewing too many candidates and saves time by filtering out unqualified candidates at the first step of the hiring process.

The test screens for the following skills that hiring managers look for in candidates:

  • Able to effectively use Git for version control
  • Proficient in Docker containerization and volume management
  • Skilled in working with Linux commands and shell scripting
  • Knowledgeable in Python fundamentals and scripting
  • Experienced with DevOps principles and practices
  • Familiar with Git workflows and branching models
  • Competent in managing Docker images and networking
  • Proficient in file system management on Linux
  • Capable of creating Python scripts for web scraping
  • Skilled in object-oriented programming in Python
  • Proficient in data structures in Python
  • Competent in coding with Python
Reason #2

No trick questions

no trick questions

Traditional assessment tools use trick questions and puzzles for the screening, which creates a lot of frustration among candidates about having to go through irrelevant screening assessments.

View sample questions

The main reason we started Adaface is that traditional pre-employment assessment platforms are not a fair way for companies to evaluate candidates. At Adaface, our mission is to help companies find great candidates by assessing on-the-job skills required for a role.

Why we started Adaface
Reason #3

Non-googleable questions

We have a very high focus on the quality of questions that test for on-the-job skills. Every question is non-googleable and we have a very high bar for the level of subject matter experts we onboard to create these questions. We have crawlers to check if any of the questions are leaked online. If/ when a question gets leaked, we get an alert. We change the question for you & let you know.

How we design questions

These are just a small sample from our library of 10,000+ questions. The actual questions on this DevOps Online Test will be non-googleable.

🧐 Question

Medium

ZeroDivisionError and IndexError
Exceptions
Solve
What will the following Python code output?
 image

Medium

Session
File Handling
Dictionary
Solve
 image
The function high_sess should compute the highest number of events per session of each user in the database by reading a comma-separated value input file of session data. The result should be returned from the function as a dictionary. The first column of each line in the input file is expected to contain the user’s name represented as a string. The second column is expected to contain an integer representing the events in a session. Here is an example input file:
Tony,10
Stark,12
Black,25
Your program should ignore a non-conforming line like this one.
Stark,3
Widow,6
Widow,14
The resulting return value for this file should be the following dictionary: { 'Stark':12, 'Black':25, 'Tony':10, 'Widow':14 }
What should replace the CODE TO FILL line to complete the function?
 image

Medium

Max Code
Arrays
Solve
Below are code lines to create a Python function. Ignoring indentation, what lines should be used and in what order for the following function to be complete:
 image

Medium

Recursive Function
Recursion
Dictionary
Lists
Solve
Consider the following Python code:
 image
In the above code, recursive_search is a function that takes a dictionary (data) and a target key (target) as arguments. It searches for the target key within the dictionary, which could potentially have nested dictionaries and lists as values, and returns the value associated with the target key. If the target key is not found, it returns None.

nested_dict is a dictionary that contains multiple levels of nested dictionaries and lists. The recursive_search function is then called with nested_dict as the data and 'target_key' as the target.

What will the output be after executing the above code?

Medium

Stacking problem
Stack
Linkedlist
Solve
What does the below function ‘fun’ does?
 image
A: Sum of digits of the number passed to fun.
B: Number of digits of the number passed to fun.
C: 0 if the number passed to fun is divisible by 10. 1 otherwise.
D: Sum of all digits number passed to fun except for the last digit.

Medium

Debugging Issues
Environment Variables
Debugging
Solve
You are working on a Linux system and have recently installed a new program named myprogram. The executable is located in /opt/myprogram/bin/. You want to be able to run this program from any directory in your shell without specifying the full path.
You executed the following command:
export PATH="/opt/myprogram/bin"
However, when you try to run the program using myprogram, you get the following error message:
-bash: myprogram: command not found

Which of the following commands can fix this issue and allow you to run the program?
A: export PATH=$PATH:/opt/myprogram/bin/
B: export PATH="/opt/myprogram:$PATH"
C: export PATH="/opt/myprogram/bin:$PATH"
D: ln -s /opt/myprogram/bin/myprogram /usr/local/bin/myprogram

Easy

File Structure and Navigation
Files
Basic Commands
Solve
Consider the following directory structure:
 image
You start at /home/user and execute the following commands:
 image
What will be the resulting directory structure?
 image

Medium

Fork mellow yellow
Solve
How many times will the following code will print "Mellow Yellow"?
 image

Medium

Remote server connection
SSH
Solve
Our software engineering intern, Wu is looking to use port 4545 on localhost to connect to a remote server called woot.bananas.com on port 80. Which command would you recommend for this?
 image

Medium

git commit without git add
Solve
Suppose a remote repository is cloned in local system and a old file named “modified_file” is modified and now if following command is run, what will "git status" return?
 image
 image

Medium

Merge into live branch
Solve
Which of the following commands will merge dev-fixes into the master-live branch?

a. git checkout master-live and git merge dev-fixes
b. git checkout dev-fixes and git merge master-live
c. git merge master-live and git checkout dev-fixes
d. git merge dev-fixes and git checkout master-live

Medium

Docker Multistage Build Analysis
Multistage Builds
Optimization
Solve
Consider the following Dockerfile, which utilizes multistage builds. The aim is to build a lightweight, optimized image that just runs the application.
 image
The Dockerfile first defines a base image that includes Node.js and npm, then it creates an intermediate image to install the npm dependencies. Afterwards, it runs the tests in another stage and finally, creates the release image.

Which of the following statements are true?

A: The final image will include the test scripts.
B: If a test fails, the final image will not be created.
C: The node_modules directory in the final image comes from the base image.
D: The final image will only contain the necessary application files and dependencies.
E: If the application's source code changes, only the release stage needs to be rebuilt.

Easy

Docker Networking and Volume Mounting Interplay
Networking
Volume Mounting
Solve
You have two docker containers, X and Y. Container X is running a web service listening on port 8080, and container Y is supposed to consume this service. Both containers are created from images that don't have any special network configurations.

Container X has a Dockerfile as follows:
 image
And, you build and run it with the following commands:
 image
Container Y is also running alpine with python installed, and it's supposed to read data from the `/app/data` directory and send a GET request to `http://localhost:8080` every 5 minutes. The Dockerfile for container B is:
 image
And you run it with:
 image
Assuming all the python scripts work perfectly and firewall isn't blocking any connections, you find that container Y can't access the web service of container X via `http://localhost:8080` and also it can't read the data in `/app/data` directory. What could be the potential reason(s)?
A: Y can't access X's web service because they're in different Docker networks.
B: Y can't read the data because the volume is not shared correctly.
C: Both A and B are correct.
D: Both A and B are incorrect.

Medium

Dockerfile Optimization
Dockerfile
Multi-stage builds
Layer Caching
Solve
You have been asked to optimize a Dockerfile for a Python application that involves a heavy dependency installation. Here is the Dockerfile you are starting with:
 image
Given that the application's source code changes frequently but the dependencies listed in requirements.txt rarely change, how can you optimize this Dockerfile to take advantage of Docker's layer caching, reducing the build time?
A: Move the `RUN pip install` command to before the `COPY` command.
B: Change `COPY . /app` to `COPY ./app.py /app` and move the `RUN pip install` command to before the `COPY` command.
C: Add `RUN pip cache purge` before `RUN pip install`.
D: Replace the base image with `python:3.8-slim`.
E: Implement multi-stage builds.

Medium

Dockerfile Updates
Cache
Solve
Check the following Dockerfile used for a project (STAGE 1):
 image
We created an image from this Dockerfile on Dec 14 2021. A couple of weeks after Dec 14 2021, Ubuntu released new security updates to their repository. After 2 months, we modified the file (STAGE 2):
 image
Couple of weeks later, we further modified the file to add a local file ada.txt to /ada.txt (STAGE 3): (Note that ada.txt exists in /home/adaface and the dockerfile exists in /home/code folders)
 image
Pick correct statements:

A: If we run “docker build .” at STAGE 2, new Ubuntu updates will be fetched because apt-get update will be run again since cache is invalidated for all lines/layers of Dockerfile when a new line is added.
B: If we run “docker build .” at STAGE 2, new Ubuntu updates will not be fetched since cache is invalidated only for last two lines of the updated Dockerfile. Since the first two commands remain the same, cached layers are re-used skipping apt get update.
C: To skip Cache, “docker build -no-cache .” can be used at STAGE 2. This will ensure new Ubuntu updates are picked up.
D: Docker command “docker build .” at STAGE 3 works as expected and adds local file ada.txt to the image.
E: Docker command “docker build .” at STAGE 3 gives an error “no such file or directory” since /home/adaface/ada.txt is not part of the Dockerfile context.

Medium

Efficient Dockerfile
Dockerfile
Solve
Review the following Dockerfiles that work on two projects (project and project2):
 image
All Docker files have the same end result:

- ‘project’ is cloned from git. After running few commands, ‘project’ code is removed.
- ‘project2’ is copied from file system and permissions to the folder is changed.
Pick the correct statements:

A: File 1 is the most efficient of all.
B: File 2 is the most efficient of all.
C: File 3 is the most efficient of all.
D: File 4 is the most efficient of all.
E: Merging multiple RUN commands into a single RUN command is efficient for ‘project’ since each RUN command creates a new layer with changed files and folders. Deleting files with RUN only marks these files as deleted but does not reclaim disk space. 
F: Copying ‘project2’ files and changing ownership in two separate commands will result in two layers since Docker duplicates all the files twice.

Medium

Resource Analysis
Process Management
System Performance
Log Analysis
Solve
As a senior DevOps engineer, you are tasked with diagnosing performance issues on a Linux server running Ubuntu 20.04. The server hosts several critical applications, but lately, users have been experiencing significant slowness. Initial monitoring shows that CPU and memory utilization are consistently high. To identify the root cause, you check the output of `top` and `ps` commands, which indicate that a particular process is consuming an unusually high amount of resources. However, the process name is generic and does not clearly indicate which application or service it belongs to. You also examine `/var/log/syslog` for any unusual entries but find nothing out of the ordinary. Based on this situation, which of the following steps would most effectively help you identify and resolve the performance issue?
A: Increase the server's physical memory and CPU capacity.
B: Use the `lsof` command to identify the files opened by the suspect process.
C: Reboot the server to reset all processes.
D: Examine the `/etc/hosts` file for any incorrect configurations.
E: Run the `netstat` command to check for abnormal network activity.
F: Check the crontab for any recently added scheduled tasks.

Medium

Streamlined DevOps
Continuous Integration
Scripting
Solve
You are in charge of developing a Bash script for setting up a continuous integration pipeline for a web application. The source code is hosted in a Git repository. The script's goals include:

1. Ensuring the local copy of the repository in /var/www/html is updated to the latest version.
2. Creating a .env file with APP_ENV=production in the project root if it doesn't already exist.
3. Running a test suite with ./run_tests.sh and handling any test failures appropriately.
4. Logging the current timestamp and commit hash in deployment_log.txt in the project root if tests pass.

Which of the following script options would most effectively and safely accomplish these tasks?
 image
🧐 Question🔧 Skill

Medium

ZeroDivisionError and IndexError
Exceptions

2 mins

Python
Solve

Medium

Session
File Handling
Dictionary

2 mins

Python
Solve

Medium

Max Code
Arrays

2 mins

Python
Solve

Medium

Recursive Function
Recursion
Dictionary
Lists

3 mins

Python
Solve

Medium

Stacking problem
Stack
Linkedlist

4 mins

Python
Solve

Medium

Debugging Issues
Environment Variables
Debugging

2 mins

Linux
Solve

Easy

File Structure and Navigation
Files
Basic Commands

2 mins

Linux
Solve

Medium

Fork mellow yellow

2 mins

Linux
Solve

Medium

Remote server connection
SSH

2 mins

Linux
Solve

Medium

git commit without git add

3 mins

Git
Solve

Medium

Merge into live branch

2 mins

Git
Solve

Medium

Docker Multistage Build Analysis
Multistage Builds
Optimization

3 mins

Docker
Solve

Easy

Docker Networking and Volume Mounting Interplay
Networking
Volume Mounting

3 mins

Docker
Solve

Medium

Dockerfile Optimization
Dockerfile
Multi-stage builds
Layer Caching

2 mins

Docker
Solve

Medium

Dockerfile Updates
Cache

2 mins

Docker
Solve

Medium

Efficient Dockerfile
Dockerfile

2 mins

Docker
Solve

Medium

Resource Analysis
Process Management
System Performance
Log Analysis

3 mins

DevOps
Solve

Medium

Streamlined DevOps
Continuous Integration
Scripting

2 mins

DevOps
Solve
🧐 Question🔧 Skill💪 Difficulty⌛ Time
ZeroDivisionError and IndexError
Exceptions
Python
Medium2 mins
Solve
Session
File Handling
Dictionary
Python
Medium2 mins
Solve
Max Code
Arrays
Python
Medium2 mins
Solve
Recursive Function
Recursion
Dictionary
Lists
Python
Medium3 mins
Solve
Stacking problem
Stack
Linkedlist
Python
Medium4 mins
Solve
Debugging Issues
Environment Variables
Debugging
Linux
Medium2 mins
Solve
File Structure and Navigation
Files
Basic Commands
Linux
Easy2 mins
Solve
Fork mellow yellow
Linux
Medium2 mins
Solve
Remote server connection
SSH
Linux
Medium2 mins
Solve
git commit without git add
Git
Medium3 mins
Solve
Merge into live branch
Git
Medium2 mins
Solve
Docker Multistage Build Analysis
Multistage Builds
Optimization
Docker
Medium3 mins
Solve
Docker Networking and Volume Mounting Interplay
Networking
Volume Mounting
Docker
Easy3 mins
Solve
Dockerfile Optimization
Dockerfile
Multi-stage builds
Layer Caching
Docker
Medium2 mins
Solve
Dockerfile Updates
Cache
Docker
Medium2 mins
Solve
Efficient Dockerfile
Dockerfile
Docker
Medium2 mins
Solve
Resource Analysis
Process Management
System Performance
Log Analysis
DevOps
Medium3 mins
Solve
Streamlined DevOps
Continuous Integration
Scripting
DevOps
Medium2 mins
Solve
Reason #4

1200+ customers in 75 countries

customers in 75 countries
Brandon

With Adaface, we were able to optimise our initial screening process by upwards of 75%, freeing up precious time for both hiring managers and our talent acquisition team alike!


Brandon Lee, Head of People, Love, Bonito

Reason #5

Designed for elimination, not selection

The most important thing while implementing the pre-employment DevOps Online Test in your hiring process is that it is an elimination tool, not a selection tool. In other words: you want to use the test to eliminate the candidates who do poorly on the test, not to select the candidates who come out at the top. While they are super valuable, pre-employment tests do not paint the entire picture of a candidate’s abilities, knowledge, and motivations. Multiple easy questions are more predictive of a candidate's ability than fewer hard questions. Harder questions are often "trick" based questions, which do not provide any meaningful signal about the candidate's skillset.

Science behind Adaface tests
Reason #6

1 click candidate invites

Email invites: You can send candidates an email invite to the DevOps Online Test from your dashboard by entering their email address.

Public link: You can create a public link for each test that you can share with candidates.

API or integrations: You can invite candidates directly from your ATS by using our pre-built integrations with popular ATS systems or building a custom integration with your in-house ATS.

invite candidates
Reason #7

Detailed scorecards & benchmarks

View sample scorecard
Reason #8

High completion rate

Adaface tests are conversational, low-stress, and take just 25-40 mins to complete.

This is why Adaface has the highest test-completion rate (86%), which is more than 2x better than traditional assessments.

test completion rate
Reason #9

Advanced Proctoring


Learn more

About the DevOps Online Test

Why you should use Pre-employment DevOps Test?

The DevOps Online Test makes use of scenario-based questions to test for on-the-job skills as opposed to theoretical knowledge, ensuring that candidates who do well on this screening test have the relavant skills. The questions are designed to covered following on-the-job aspects:

  • Using Git for version control and collaboration
  • Understanding Git workflows for efficient development
  • Implementing Git branching models for parallel development
  • Working with Docker containers for application deployment
  • Managing Docker volumes for persistent data storage
  • Building Docker images for efficient application deployment
  • Configuring Docker networking for inter-container communication
  • Executing Linux commands for system administration
  • Creating shell scripts for automation and task management
  • Managing file systems for data organization

Once the test is sent to a candidate, the candidate receives a link in email to take the test. For each candidate, you will receive a detailed report with skills breakdown and benchmarks to shortlist the top candidates from your pool.

What topics are covered in the DevOps Test?

  • Git basics

    Git basics refers to the fundamental concepts and commands used in the Git version control system. This skill should be measured in the test because proficiency in Git basics is crucial for any DevOps professional who needs to manage source code, track changes, and collaborate with other team members effectively.

  • Git workflows

    Git workflows are specific strategies or approaches for using Git, such as centralized, feature branch, or Gitflow workflow. Measuring this skill in the test helps recruiters assess a candidate's understanding of different Git workflows and their ability to choose and implement appropriate workflows for efficient and scalable software development.

  • Git branching models

    Git branching models refer to the strategies and structures for creating and managing branches in Git, such as feature branches, release branches, or hotfix branches. Testing a candidate's knowledge of Git branching models is important as it demonstrates their proficiency in organizing and maintaining code versions, collaborating on parallel workstreams, and ensuring a robust development workflow.

  • Docker containers and volumes

    Docker containers and volumes are essential components of Docker, a popular containerization platform. This skill should be measured in the test as it assesses a candidate's understanding of how to create, configure, and manage Docker containers, which enables developers to package applications with their dependencies and ensures consistent deployment across different environments.

  • Docker images and networking

    Docker images are snapshots of containerized applications and their dependencies, while Docker networking allows communication between containers and other network resources. Evaluating a candidate's knowledge of Docker images and networking is important as it reflects their ability to design and optimize container-based architectures, manage network connectivity, and troubleshoot container-related issues.

  • Linux commands

    Linux commands are the instructions used to interact with a Linux-based operating system. This skill is measured in the test to assess a candidate's familiarity with essential Linux commands, such as file management, process control, system monitoring, and user management. Proficiency in Linux commands is crucial for DevOps professionals working with Linux environments.

  • Shell scripting

    Shell scripting involves writing scripts or programs that run in a Unix-like shell, such as Bash, to automate tasks, perform system administration tasks, and execute commands. Testing a candidate's skill in shell scripting is essential as it demonstrates their ability to write efficient and reliable scripts, automate repetitive tasks, and streamline system configuration and maintenance.

  • File system management

    File system management refers to the processes and techniques used to organize, monitor, and control the storage and retrieval of files within an operating system. Measuring this skill in the test helps recruiters evaluate a candidate's understanding of file system structures, permissions, disk usage, and backup strategies, which are crucial for managing and securing data in a DevOps environment.

  • Python fundamentals

    Python fundamentals encompass the core concepts and syntax of the Python programming language, including data types, variables, operators, control structures, and functions. This skill should be measured in the test as it provides recruiters an understanding of a candidate's foundational knowledge of Python, which is widely used in DevOps for automation, scripting, and infrastructure management.

  • Scripting and web scraping

    Scripting and web scraping involve writing scripts or programs to automate tasks and extract data from websites. Measuring this skill in the test assesses a candidate's ability to write scripts using Python or other scripting languages, utilize web scraping libraries or tools, and extract, transform, and analyze data for various DevOps use cases or data-driven decision making.

  • Python OOP

    Python OOP (Object-Oriented Programming) involves designing and implementing classes, objects, and their relationships to create modular and reusable code. Evaluating a candidate's proficiency in Python OOP helps recruiters assess their ability to develop robust and maintainable code structures, implement inheritance and polymorphism, and apply OOP principles for efficient software development and code reuse.

  • Data Structures

    Data structures refer to the organization, storage, and manipulation of data within a computer program. Measuring this skill in the test allows recruiters to evaluate a candidate's understanding of fundamental data structures like lists, dictionaries, arrays, stacks, and queues, which are essential for efficient data processing, algorithm design, and problem-solving in DevOps.

  • Python Coding

    Python coding refers to the practical application of Python programming skills to solve real-world problems and implement software solutions. This skill should be measured in the test to assess a candidate's ability to write clean, maintainable, and efficient Python code, follow coding best practices, and demonstrate proficiency in implementing algorithms, data manipulation, and system automation using Python.

  • Full list of covered topics

    The actual topics of the questions in the final test will depend on your job description and requirements. However, here's a list of topics you can expect the questions for DevOps Online Test to be based on.

    Git basics
    Git workflows
    Git branching models
    Docker containers
    Docker volumes
    Docker images
    Docker networking
    Linux commands
    Shell scripting
    File system management
    Python fundamentals
    Scripting
    Web scraping
    Python OOP
    Data Structures
    Python Coding

What roles can I use the DevOps Test for?

  • DevOps Engineer
  • Software Developer
  • System Administrator
  • Cloud Engineer
  • Release Manager
  • Quality Assurance Engineer
  • Site Reliability Engineer
  • IT Operations Engineer
  • Infrastructure Developer CI/CD
  • Associate DevOps Engineer

How is the DevOps Test customized for senior candidates?

For intermediate/ experienced candidates, we customize the assessment questions to include advanced topics and increase the difficulty level of the questions. This might include adding questions on topics like

  • Understanding Python fundamentals for script development
  • Writing scripts for web scraping and data extraction
  • Implementing object-oriented programming (OOP) in Python
  • Utilizing data structures for efficient data manipulation
  • Solving coding challenges using Python
  • Designing scalable and maintainable code in Python
  • Performing automated testing in Python
  • Using APIs for web services integration
  • Implementing continuous integration and deployment (CI/CD) pipelines
  • Working with cloud platforms (e.g., AWS, Azure) for deployment and scalability
Singapore government logo

The hiring managers felt that through the technical questions that they asked during the panel interviews, they were able to tell which candidates had better scores, and differentiated with those who did not score as well. They are highly satisfied with the quality of candidates shortlisted with the Adaface screening.


85%
reduction in screening time

DevOps Hiring Test FAQs

Can I combine multiple skills into one custom assessment?

Yes, absolutely. Custom assessments are set up based on your job description, and will include questions on all must-have skills you specify. Here's a quick guide on how you can request a custom test.

Do you have any anti-cheating or proctoring features in place?

We have the following anti-cheating features in place:

  • Non-googleable questions
  • IP proctoring
  • Screen proctoring
  • Web proctoring
  • Webcam proctoring
  • Plagiarism detection
  • Secure browser
  • Copy paste protection

Read more about the proctoring features.

How do I interpret test scores?

The primary thing to keep in mind is that an assessment is an elimination tool, not a selection tool. A skills assessment is optimized to help you eliminate candidates who are not technically qualified for the role, it is not optimized to help you find the best candidate for the role. So the ideal way to use an assessment is to decide a threshold score (typically 55%, we help you benchmark) and invite all candidates who score above the threshold for the next rounds of interview.

What experience level can I use this test for?

Each Adaface assessment is customized to your job description/ ideal candidate persona (our subject matter experts will pick the right questions for your assessment from our library of 10000+ questions). This assessment can be customized for any experience level.

Does every candidate get the same questions?

Yes, it makes it much easier for you to compare candidates. Options for MCQ questions and the order of questions are randomized. We have anti-cheating/ proctoring features in place. In our enterprise plan, we also have the option to create multiple versions of the same assessment with questions of similar difficulty levels.

I'm a candidate. Can I try a practice test?

No. Unfortunately, we do not support practice tests at the moment. However, you can use our sample questions for practice.

What is the cost of using this test?

You can check out our pricing plans.

Can I get a free trial?

Yes, you can sign up for free and preview this test.

I just moved to a paid plan. How can I request a custom assessment?

Here is a quick guide on how to request a custom assessment on Adaface.

customers across world
Join 1200+ companies in 75+ countries.
Try the most candidate friendly skills assessment tool today.
g2 badges
Ready to use the Adaface DevOps Online Test?
Ready to use the Adaface DevOps Online Test?
logo
40 min tests.
No trick questions.
Accurate shortlisting.
Terms Privacy Trust Guide

🌎 Pick your language

English Norsk Dansk Deutsche Nederlands Svenska Français Español Chinese (简体中文) Italiano Japanese (日本語) Polskie Português Russian (русский)
ada
Ada
● Online
Previous
Score: NA
Next
✖️