1. Getting Started
1.1. Quick Start Guide
Prerequisites:
|
-
To open Moon Cloud user interface - go to https://my-company.cloud.aerokube.com/ and use provided username and password when prompted.
-
To run automated tests use my-company.cloud.aerokube.com as host, 443 as port and the same credentials. Depending on the framework resulting address would be:
-
Cypress:
https://username:password@my-company.cloud.aerokube.com/cypress/electron
-
Playwright:
wss://username:password@my-company.cloud.aerokube.com/playwright/webkit
-
Puppeteer:
wss://username:password@my-company.cloud.aerokube.com/cdtp/chromium
-
Selenium:
https://username:password@my-company.cloud.aerokube.com/wd/hub
Detailed instructions and examples on using particular frameworks can be found in the next sections of this documentation.
-
1.2. How it works
In this section we describe a typical list of technologies we are using for Moon Cloud.
1.2.1. Container runtime
We are using built-in Kubernetes service of the cloud platform:
-
Elastic Kubernetes Service for Amazon Web Services;
-
Google Kubernetes Engine for Google Cloud;
-
Azure Kubernetes Service for Microsoft Azure.
Container runtime is always configured with auto-scaling enabled. How big your cluster can grow is configurable. We are usually setting reasonable default values for maximum cluster size preventing you from paying too much. By default, Moon Cloud cluster works as follows.
-
When no tests are running Moon Cloud remains in idle mode which looks like this:
Moon itself is launched on two constantly running Kubernetes nodes. Each node is a small cloud virtual machines connected to Kubernetes cluster. These nodes are distributed across two separate datacenters in the same geographic region to provide fault-tolerant solution.
-
When you start running your tests Moon Cloud looks like this:
Depending on the number of requested browsers cloud platform automatically starts one or several virtual machines. These virtual machines then join the Kubernetes cluster. These nodes have more CPUs and memory and are used for launching browsers on them. The maximum number of such nodes is limited to not spend too much money if you accidentally request too many browsers. Unused nodes are automatically removed by the cloud platform after some time (usually 10-15 minutes). Starting 1 node takes approximately 1 minute, so if you launch your tests when Moon Cloud is in idle mode it can take up to 1 minute to get first browsers started. If you need first browsers to start fast, upon your request we can configure Kubernetes to always have one or several browser nodes running. This is more expensive but first sessions are starting faster.
1.2.2. Storage
We are using an S3-compatible storage for browser session logs and recorded videos in selected cloud platform:
-
S3 for Amazon Web Services;
-
Google Cloud Storage for Google Cloud;
-
Azure Blob Storage for Microsoft Azure.
Upon your request we can configure Moon Cloud to send all these files to S3 bucket in your project. Thus, you will have full control over your data.
1.2.3. Networking
We rely on standard networking features provided by the cloud platform. By default, only publicly available web applications can be tested with Moon Cloud. However, if you need to test web applications with no public access, we can use one of the following options.
-
VPC peering to test web applications deployed to your cloud project;
-
VPN to test web applications running on your workstation;
-
Advanced cloud platform networking features like AWS Direct Connect to access web applications in non-cloud corporate network.
1.2.4. Moon
We deploy exactly the same Moon distribution as you can install on-premises. So from functional perspective there is no difference between Moon Cloud and Moon on-premises.
1.3. User Interface
While the majority of interactions with Moon Cloud are done directly from your tests, some tasks can be done from graphical user interface:
-
Getting a list of running browser sessions
-
Getting a list of available browsers
-
Doing manual testing
User interface is always available on the following address:
https://my-company.cloud.aerokube.com/
For opening this page you will need to provide the same username
and password
as you are using for running your tests.
1.3.1. Running Browser Sessions
A complete list of running browser sessions can be found on the main page of user interface (also referred as Stats
). This list is showing all browser sessions and browser consumption statistics.
For browser sessions with visible browser window you can additionally see what’s happening with this browser - just click on a session from the list:
1.3.2. Manual Testing
Sometimes you may want to quickly check something in browser instead of implementing a test case as code:
-
Go to
Capabilities
tab and select desired browser version from the list:Select browser version -
Click on
Create Session
:Click to create browser session -
Session will be created and you will see the same screen as in the previous section.
2. Automated Testing
2.1. Cypress
Moon Cloud supports parallel Cypress tests execution out of the box. This works with the help of an additional executable called cypress-moon
(cypress-moon.exe
under Windows).
2.1.1. Install cypress-moon executable
To install cypress-moon
executable do one of the following.
Option 1. Download executable directly
Go to Moon releases page and download a cypress-moon
executable for your platform. For example:
$ wget -O /usr/local/bin/cypress-moon https://github.com/aerokube/moon/releases/download/1.9.1/cypress-moon_linux_amd64
Option 2. Use NPM
We provide an NPM package that automatically downloads an executable for your platform. To install it:
$ npm install @aerokube/cypress-moon
2.1.2. Run your tests
To start executing Cypress tests in Moon Cloud - just run a simple command in your Cypress project directory:
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/chromium
In our example project the command above is executed as package.json script.
|
Every time you execute this command - a new browser session is started.
2.1.3. Advanced features
All additional features are enabled by adding parameters to Moon URL. |
By default, all available tests are executed in the same browser. It is possible to execute only some files with tests:
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/chromium?spec=cypress/integration/my-spec.js&spec=cypress/integration/another-*.js
Cypress tests can be executed in one of the following browsers:
-
Google Chrome
-
Chromium
-
Microsoft Edge
-
Electron
-
Firefox
To select a browser - simply change Moon URL:
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/chrome # Latest available Chrome version
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/chromium/cypress-8.3.0 # Chromium compatible with Cypress version 8.3.0
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/edge # Microsoft Edge
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/electron # Electron
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/firefox/90.0 # Firefox version 90.0
By default, browsers are executed in headless mode (no browser window is shown). To view what’s happening during test execution in Moon Cloud user interface:
$ cypress-moon https://username:password@my-company.cloud.aerokube.com/cypress/chrome?headless=false&name=MyDebugSessionName # You can optionally add custom label to every running session
2.2. Playwright
Moon Cloud supports parallel Playwright tests execution out of the box.
2.2.1. Run your tests
To start executing Playwright tests in Moon Cloud you have to connect to remote web socket as follows:
const { firefox } = require('playwright');
(async () => {
const browser = await firefox.connect({ timeout: 0, wsEndpoint: 'wss://username:password@my-company.cloud.aerokube.com/playwright/firefox/playwright-1.14.0' }); // We recommend to request an exact Playwright version corresponding to what you have in dependencies
const page = await browser.newPage();
await page.goto('https://example.com/');
await page.screenshot({ path: `screenshot.png` });
await browser.close();
})();
Every time you call firefox.connect()
- a new browser session is started. This session is alive until you disconnect. Playwright tests can be executed in one of the following browsers:
-
Google Chrome (mainly needed for testing web applications using proprietary video codecs)
-
Chromium
-
Webkit
-
Firefox
To select a browser - simply change Moon URL:
const { firefox, chromium, webkit } = require('playwright');
(async () => {
const firefoxBrowser = await firefox.connect({ timeout: 0, wsEndpoint: 'wss://username:password@my-company.cloud.aerokube.com/playwright/firefox' }); // Latest available Firefox version (usually requires latest available Playwright version)
const chromiumBrowser = await chromium.connect({ timeout: 0, wsEndpoint: 'wss://username:password@my-company.cloud.aerokube.com/playwright/chromium/playwright-1.14.0' }); // Chromium compatible with Playwright 1.14.0
const chromeBrowser = await chromium.connect({ timeout: 0, wsEndpoint: 'wss://username:password@my-company.cloud.aerokube.com/playwright/chrome/92.0' }); // Google Chrome 92.0
const webkitBrowser = await webkit.connect({ timeout: 0, wsEndpoint: 'wss://username:password@my-company.cloud.aerokube.com/playwright/webkit/14.0' }); // This is to emulate Safari
// ...
})();
2.2.2. Advanced features
All additional features are enabled by adding parameters to Moon URL. |
By default, browsers are executed in headless mode (no browser window is shown). To view what’s happening during test execution in Moon Cloud user interface:
const { chromium } = require('playwright');
(async () => {
const chromiumBrowser = await chromium.connect({ timeout: 0, wsEndpoint: 'wss://username:password@my-company.cloud.aerokube.com/playwright/chromium/playwright-1.14.0?headless=false&name=MyDebugSessionName' }); //
// ...
})();
To enable video recording:
const { chromium } = require('playwright');
(async () => {
const chromiumBrowser = await chromium.connect({ timeout: 0, wsEndpoint: 'wss://username:password@my-company.cloud.aerokube.com/playwright/chromium/playwright-1.14.0?headless=false&enableVideo=true' }); //
// ...
})();
2.3. Puppeteer
|
Moon Cloud supports parallel Puppeteer tests execution out of the box. Similar tools relying on Chrome Developer Tools Protocol should also work.
2.3.1. Run your tests
To start executing Puppeteer tests in Moon Cloud you have to connect to remote web socket as follows:
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.connect({ timeout: 0, browserWSEndpoint: `wss://username:password@my-company.cloud.aerokube.com/cdtp/chrome/86.0` });
const page = await browser.newPage();
await page.goto('https://aerokube.com');
await page.screenshot({path: 'screenshot.png'});
const title = await page.title();
console.log(title);
await browser.close();
})();
Every time you call puppeteer.connect()
- a new browser session is started. This session is alive until you disconnect.
2.3.2. Advanced features
All additional features are enabled by adding parameters to Moon URL. |
By default, browsers are executed in headless mode (no browser window is shown). To view what’s happening during test execution in Moon Cloud user interface:
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.connect({ timeout: 0, browserWSEndpoint: `wss://username:password@my-company.cloud.aerokube.com/cdtp/chrome/92.0?headless=false&name=&name=MyDebugSessionName` });
//...
})();
To enable video recording:
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.connect({ timeout: 0, browserWSEndpoint: `wss://username:password@my-company.cloud.aerokube.com/cdtp/chrome/92.0?headless=false&name=&enableVideo=true` });
//...
})();
2.4. Selenium
2.4.1. Run your tests
Selenium is supported by the majority of mainstream programming languages and a lot of different frameworks. Moon Cloud is 100% compatible with Selenium protocol and all available standard features should work. We created a set of example projects demonstrating how to use Selenium with Moon Cloud:
In Moon Cloud you should use the following as Selenium URL in your tests:
https://username:password@my-company.cloud.aerokube.com/wd/hub
2.4.2. Session identifier
Every running browser session has a unique identifier called session-id
. It looks like the following:
firefox-90-0-f2bcd32b-d932-4cdc-a639-687ab8e4f840
This identifier is used is some advanced Moon Cloud features to uniquely identify the browser your would like to work with. How to get this identifier depends on programming language:
driver.getSessionId();
driver.session_id
browser.sessionId
2.4.3. Additional features
|
-
To debug running browser session in user interface add
enableVNC
capability:Adding enableVNC capability{ "moon:options": { "enableVNC": true } }
If you are at the same time running automated tests for your regular testing processes and debugging some tests - then you may need to add
name
capability to distinguish which test is running in which browser:Adding name capability{ "moon:options": { "name": "MyCoolTestCase" } }
-
To record a video of a running browser session add
enableVideo
capability:Adding enableVideo capability{ "moon:options": { "enableVideo": true } }
Value for enableVNC
andenableVideo
capabilities should be passed as boolean and not as string. -
Default screen resolution is
1920x1080
. To change it - addscreenResolution
capability:Adding screenResolution capability{ "moon:options": { "screenResolution": "1024x768" } }
-
To change environment variables - add
env
capability:Adding env capability{ "moon:options": { "env": ["LANG=de_DE.UTF-8", "LANGUAGE=de:en", "LC_ALL=de_DE.UTF-8"] } }
One of the most popular applications of this capability is selecting preferred operating system encoding.
-
To work with the clipboard - you have to send HTTP requests from your code:
Reading clipboard contents$ curl https://username:password@my-company.cloud.aerokube.com/clipboard/<session-id> # How to get <session-id> value is shown above some-clipboard-value
Updating clipboard contents$ curl -X POST --data 'some-clipboard-value' https://username:password@my-company.cloud.aerokube.com/clipboard/<session-id>
-
To get a list of files downloaded by the browser as JSON:
Getting a list of downloaded files in JSON format$ curl https://username:password@my-company.cloud.aerokube.com/download/<session-id>/?json ["hello.txt", "report.pdf"]
To access individual files:
Accessing file downloaded by the browser$ curl https://username:password@my-company.cloud.aerokube.com/download/<session-id>/hello.txt Hello, world!
Files should be saved to /home/selenium/Downloads
.
3. Pricing
Last updated: August 20th, 2021. Replaces the prior version in its entirety.
-
Moon Cloud is using pay as you go pricing model. Monthly cost depends on your real monthly browser usage. More browser sessions you run in parallel - more you pay.
-
Some Moon Cloud components (network load balancer, computing resources for Moon itself, S3 bucket and so on) are running in the cloud all the time during the month. Because of that there is a constant payment part which is billed even if you don’t run your tests. An exact value of this part depends on selected cloud platform and region. For example a typical value for AWS cloud is about $170.
-
An invoice for current month is issued at the beginning of the next month, when we receive an invoice from the cloud platform. Final invoice amount is calculated by adding our 25% maintenance commission to cloud platform invoice amount:
-
Cloud Platform Invoice = $100
-
Our Commission = $100 * 25% = $25
-
Final Invoice Amount = $100 + $25 = $125
-
-
Because of pay as you go pricing model, there is no option of yearly payment.
-
Optionally we can give you access to the cloud platform billing page or configure billing alerts, so you could better control possible expenses.
4. Legal Documents
4.1. Terms of Service
Moon Cloud is using post-payment pricing model. Because of that we sign a dedicated software license agreement with all our customers. A typical version of this agreement can be found here.
Last updated document version: August, 20th, 2021. Replaces the prior version in its entirety.
4.2. Privacy Policy
Last updated: August, 20th, 2021. Replaces the prior version in its entirety.
This Privacy Policy describes how Aerokube Software OÜ and its affiliates ("Aerokube", "Moon Cloud" "we," "our" or "us") collect, use, and share information in connection with your use of Moon Cloud (also referred to in this Privacy Policy as the "Services"). An affiliated company (referred to in this Privacy Policy as "Affiliated" or an "Affiliate") means any entity that directly or indirectly controls, is controlled by, or is under common control with us, and "control" for purposes of this definition, means direct or indirect ownership or control of more than 50% of the voting interests of the subject entity. This Privacy Policy (the "Privacy Policy") does not apply to information our customers may process when using our Services.
In this Privacy Policy, the term "Personal Data" means data relating to a living individual who is or can be identified either from the data or from the data in conjunction with other information that is in, or is likely to come into, our possession, and includes personal data as described in Data Protection Legislation. Any Personal Data that we collect from you for these purposes is hereinafter referred to together as "Your Data".
We may collect and receive information about users of our Services ("users," "you," or "your") from various sources, including:
-
Information you provide through your user account on the Services (your "Account") if you register for the Services
-
Your use of the Services
-
From third-party websites, services, and partners
We recommend that you read this Privacy Policy in full to ensure you are fully informed. If you have any questions about this Privacy Policy or Aerokube’s data collection, use, and disclosure practices, please contact us at privacy@aerokube.com. The data controller of your personal information is Aerokube Software OÜ.
4.2.1. Information We Collect
Information You Provide
-
Account Registration. When you request to create a Moon Cloud account, you provide the following information:
-
Desired public cloud platform name and region;
-
Desired cluster name. Usually this name is the same as your company name and is used in cluster network host name. For example cluster my-company with be accessible at http://my-company.cloud.aerokube.com;
-
Maximum desired number of browsers allowed to run in parallel.
-
-
Communications. If you contact us directly, we may receive additional information about you such as your name, email address, phone number, the contents of the message with attachments you may send us, and any other information you may choose to provide. We may also receive a confirmation when you open an email from us.
Information We Collect When You Use Our Services
-
Log Files. We gather certain information automatically and store it in log files. When you use our Services, we may collect certain information automatically from your device: IP addresses, internet service provider, browser type, operating system, date or time stamp, landing page and referring URL. In some countries, including countries in the European Economic Area, the information referenced above in this paragraph may be considered personal information under applicable data protection laws.
-
Cookies. Cookie is a small text file that is placed on your device by a web server and allows a website to recognize your browser and to provide features based on who you are. Detailed description of how we are using cookies is available in Cookie Policy. We store information that we collect through cookies or log files to record your preferences. We may also automatically collect information about your use of features of our Services, about the functionality of our Services, frequency of visits, and other information related to your interactions with the Services. We may track your use across different websites and services.
-
Usage of our Services. When you use our Services, we may collect information about your utilization of our Services. We collect and store system-level metrics such as processor and memory usage, storage capacity. We use this data to operate the Services, maintain and improve the performance and utilization of the Services, develop new features, protect the security and safety of our Services and our customers, and provide customer support. We also use this data to develop aggregate analysis and business intelligence that enable us to operate, protect, make informed decisions, and report on the performance of our business.
Information We Receive from Third Parties
-
Third-Party Accounts. If you choose to link our Services to a third-party account, we will receive information about that account, such as your authentication token from the third-party account, to authorize linking. If you wish to limit the information available to us, you should visit the privacy settings of your third-party accounts to learn about your options.
-
Third-Party Partners. We may also receive publicly available information about you from our third-party partners and combine it with data that we have about you.
4.2.2. How We Use Information
We use the information we collect in various ways:
-
To provide, operate, maintain, improve, personalize, and expand our Services;
-
To understand and analyze how you use our Services;
-
To develop new products, services, features, and functionality;
-
To communicate with you for customer service;
-
To provide you with updates relating to the Service;
-
For marketing and promotional purposes;
-
To process your transactions;
-
To find and prevent fraud;
-
To enforce our Terms of Service or other legal rights;
-
To comply to applicable laws and regulations when requested by any judicial process or governmental agency.
4.2.3. How We Share Information
We may share the information we collect in various ways:
-
Vendors and Service Providers. We may share information with third-party vendors and service providers that provide services on our behalf, such as helping to provide our Services, for promotional or marketing purposes, to provide you with information relevant to you such as product announcements, software updates, special offers, or other information.
-
Aggregate Information. Where legally permissible, we may use and share information about users with our partners in aggregated or de-identified form that can’t reasonably be used to identify you.
-
Third-Party Partners. We also share information about users with third-party partners in order to receive additional publicly available information about you.
-
Analytics. We use analytics providers such as Google Analytics and Yandex Metrica.
-
Business Transfers. Information may be disclosed and otherwise transferred to any potential acquirer, successor, or assignee as part of any proposed merger, acquisition, debt financing, sale of assets, or similar transaction, or in the event of insolvency, bankruptcy, or receivership in which information is transferred to one or more third parties as one of our business assets.
-
When Required By Law. We may also share information to:
-
Satisfy any applicable law, regulation, legal process, or governmental request
-
Enforce this Privacy Policy and our Terms of Service, including investigation of potential violations hereof
-
Detect, prevent, or otherwise address fraud, security, or technical issues
-
Respond to your requests
-
Protect our rights, property or safety, our users and the public
This includes exchanging information with other companies and organizations for fraud protection and spam or malware prevention.
-
Where we wish to use Your Data in any other way, we will ensure that we notify you and get your consent first. You will be given the opportunity to withhold or withdraw your consent for the use of Your Data for purposes other than those listed in this Privacy Policy.
Aerokube is a global business. We may transfer personal information to countries other than the country in which the data was originally collected. These countries may not have the same data protection laws as the country in which you initially provided the information. When we transfer your personal information to other countries, we will protect that information as described in this Privacy Policy.
4.2.4. Access
-
If you are a registered user, you may access certain information associated with your Account by logging into our Services or emailing privacy@aerokube.com.
-
If you terminate your Account, any public activity on your Account prior to deletion may remain stored on our servers and may remain accessible to the public.
-
To protect your privacy and security, we may also take reasonable steps to verify your identity before updating or removing your information.
-
The information you provide us may be archived or stored periodically by us according to back up processes for disaster recovery purposes.
-
Your ability to access and correct your information may be temporarily limited where access and correction could:
-
Inhibit our ability to comply with a legal obligation, to investigate, make or defend legal claims;
-
Result in disclosure of personal information about a third party;
-
Result in breach of a contract or disclosure of trade secrets or other proprietary business information belonging to Aerokube or a third party.
-
4.2.5. Data Retention
-
We retain personal information we collect from you where we have an ongoing legitimate business need to do so. For example, to provide you with a service you have requested or to comply with applicable legal, tax, or accounting requirements.
-
When we have no ongoing legitimate business need to process your personal information, we will either delete or anonymize it. If this is not possible (for example, because your personal information has been stored in backup archives), then we will securely store your personal information and isolate it from any further processing until deletion is possible.
-
In general personal information that you provide to us, and any logs created by us relating to User Uploaded Data, will be kept and stored for 90 days from the date of upload/creation, after which point they will then be automatically deleted by us.
4.2.6. How We Protect Information
-
We do our utmost to protect user privacy through the appropriate use of security technology. We restrict access to Your Data to employees, contractors and agents who need to know such Your Data in order to operate, develop or improve the services that we provide. We ensure that we have appropriate physical and technological security measures to protect your information; and we ensure that when we outsource any processes that the service provider has appropriate security measures in place.
-
The Service may contain hyperlinks to websites owned and operated by third parties. These third party websites have their own privacy policies, including cookies. We do not accept any responsibility or liability for the privacy practices of such third party websites and your use of such websites is at your own risk.
-
We will implement appropriate technical and organisational measures to ensure a level of security appropriate to the risks that are presented by the processing of Your Data. In particular, we will consider the risks presented by accidental or unlawful destruction, loss, alteration, unauthorised disclosure of, or access to Your Data transmitted, stored or otherwise processed.
-
We use strong secure data transmission techniques such as TLS (HTTPs) on all parts of its service/website. Your Data is always being transmitted in encrypted form.
-
Passwords and security tokens are stripped before they are logged into our system.
-
Unfortunately, the transmission of information via the internet is not completely secure. Although we will do our best to protect Your Data, we cannot guarantee the security of any data transmitted us and any such transmission is at your own risk. Once we have received your information, we will use strict procedures and security features to try to prevent unauthorised access. To the extent permitted by law, we are not responsible for any delays, delivery failures, or any other loss or damage resulting from the transfer of data over communications networks and facilities, including the internet, or any delay or delivery failure on the part of any other service provider not contracted by us, and you acknowledge that the Service may be subject to limitations, delays and other problems inherent in the use of such communications facilities. You will appreciate that we cannot guarantee the absolute prevention of cyber-attacks such as hacking, spyware and viruses. Accordingly, you will not hold us liable for any unauthorised disclosure, loss or destruction of Your Data arising from such risks.
4.2.7. Children’s Privacy
We do not knowingly collect information from children under the age of 13. Children under 13 are prohibited from using our Services. If you learn that a child has provided us with personal information in violation of this Privacy Policy, you can alert us at privacy@aerokube.com.
4.2.8. General Data Protection Regulation (GDPR)
If you are a resident of the European Economic Area (EEA), you have the following data protection rights:
-
To access, correct, update, or request deletion of your personal information. You can do so at any time by emailing privacy@aerokube.com.
-
In addition, you can object to the processing of your personal information, ask us to restrict the processing of your personal information, or request portability of your personal information. Again, you can exercise these rights by emailing privacy@aerokube.com.
-
You have the right to opt-out of marketing communications we send you at any time. You can exercise this right by clicking on the "unsubscribe" or "opt-out" link in the marketing emails we send you. To opt-out of other forms of marketing, please contact us by emailing privacy@aerokube.com.
-
Similarly, if we have collected and process your personal information with your consent, then you can withdraw your consent at any time. Withdrawing your consent will not affect the lawfulness of any processing we conducted prior to your withdrawal, nor will it affect the processing of your personal information conducted in reliance on lawful processing grounds other than consent.
-
You have the right to complain to a data protection authority about our collection and use of your personal information. For more information, please contact your local data protection authority.
We respond to all requests we receive from individuals wishing to exercise their data protection rights in accordance with applicable data protection laws.
4.2.9. Changes To This Privacy Policy
This Privacy Policy may be modified from time to time, so please review it frequently. Changes to this Privacy Policy will be posted on our websites. If we materially change the ways in which we use or share personal information previously collected from you through our Services, we will notify you through our Services, by email, or other communication.
4.2.10. How to Contact Us
If you need to contact us with regard to any of your rights as set out in this Policy, all such requests should be made in writing by email to privacy@aerokube.com.
4.3. Cookie Policy
Last updated: August, 20th, 2021. Replaces the prior version in its entirety.
This Cookie Policy describes how Aerokube Software OÜ and its affiliates ("Aerokube", "Moon Cloud" "we," "our" or "us") are dealing with cookies in Moon Cloud solution.