1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from 'react';
6 import { configure, mount } from "enzyme";
7 import { InstanceTypesPanel, calculateKeepBufferOverhead, discountRamByPercent } from './instance-types-panel';
8 import Adapter from "enzyme-adapter-react-16";
9 import { combineReducers, createStore } from "redux";
10 import { Provider } from "react-redux";
11 import { formatFileSize, formatCWLResourceSize } from 'common/formatters';
13 configure({ adapter: new Adapter() });
15 describe('<InstanceTypesPanel />', () => {
20 const initialAuthState = {
25 ProviderType: "provider",
29 IncludedScratch: 1000,
33 ProviderType: "gpuProvider",
41 HardwareCapability: '8.6',
42 DriverVersion: '11.4',
47 ReserveExtraRAM: 1000,
55 store = createStore(combineReducers({
56 auth: (state: any = initialAuthState, action: any) => state,
60 it('renders instance types', () => {
63 <Provider store={store}>
64 <InstanceTypesPanel />
68 Object.keys(initialAuthState.config.clusterConfig.InstanceTypes).forEach((instanceKey) => {
69 const instanceType = initialAuthState.config.clusterConfig.InstanceTypes[instanceKey];
70 const item = panel.find(`Grid[data-cy="${instanceKey}"]`)
72 expect(item.find('h6').text()).toContain(instanceKey);
73 expect(item.text()).toContain(`Provider type${instanceType.ProviderType}`);
74 expect(item.text()).toContain(`Price$${instanceType.Price}`);
75 expect(item.text()).toContain(`Cores${instanceType.VCPUs}`);
76 expect(item.text()).toContain(`Preemptible${instanceType.Preemptible.toString()}`);
77 expect(item.text()).toContain(`Max disk request${formatCWLResourceSize(instanceType.IncludedScratch)} (${formatFileSize(instanceType.IncludedScratch)})`);
78 if (instanceType.CUDA && instanceType.CUDA.DeviceCount > 0) {
79 expect(item.text()).toContain(`CUDA GPUs${instanceType.CUDA.DeviceCount}`);
80 expect(item.text()).toContain(`Hardware capability${instanceType.CUDA.HardwareCapability}`);
81 expect(item.text()).toContain(`Driver version${instanceType.CUDA.DriverVersion}`);
87 describe('calculateKeepBufferOverhead', () => {
88 it('should calculate correct buffer size', () => {
90 {input: 0, output: (220<<20)},
91 {input: 1, output: (220<<20) + ((1<<26) * (11/10))},
92 {input: 2, output: (220<<20) + 2*((1<<26) * (11/10))},
95 for (const {input, output} of testCases) {
96 expect(calculateKeepBufferOverhead(input)).toBe(output);
101 describe('discountRamByPercent', () => {
102 it('should inflate ram requirement by 5% of final amount', () => {
104 {input: 0, output: 0},
105 {input: 114, output: 120},
108 for (const {input, output} of testCases) {
109 expect(discountRamByPercent(input)).toBe(output);