// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; import { configure, mount } from "enzyme"; import { InstanceTypesPanel, calculateKeepBufferOverhead, discountRamByPercent } from './instance-types-panel'; import Adapter from "enzyme-adapter-react-16"; import { combineReducers, createStore } from "redux"; import { Provider } from "react-redux"; import { formatFileSize, formatCWLResourceSize } from 'common/formatters'; configure({ adapter: new Adapter() }); describe('', () => { // let props; let store; const initialAuthState = { config: { clusterConfig: { InstanceTypes: { "normalType" : { ProviderType: "provider", Price: 0.123, VCPUs: 6, Preemptible: false, IncludedScratch: 1000, RAM: 5000, }, "gpuType" : { ProviderType: "gpuProvider", Price: 0.456, VCPUs: 8, Preemptible: true, IncludedScratch: 500, RAM: 6000, CUDA: { DeviceCount: 1, HardwareCapability: '8.6', DriverVersion: '11.4', }, }, }, Containers: { ReserveExtraRAM: 1000, } } } } beforeEach(() => { store = createStore(combineReducers({ auth: (state: any = initialAuthState, action: any) => state, })); }); it('renders instance types', () => { // when const panel = mount( ); // then Object.keys(initialAuthState.config.clusterConfig.InstanceTypes).forEach((instanceKey) => { const instanceType = initialAuthState.config.clusterConfig.InstanceTypes[instanceKey]; const item = panel.find(`Grid[data-cy="${instanceKey}"]`) expect(item.find('h6').text()).toContain(instanceKey); expect(item.text()).toContain(`Provider type${instanceType.ProviderType}`); expect(item.text()).toContain(`Price$${instanceType.Price}`); expect(item.text()).toContain(`Cores${instanceType.VCPUs}`); expect(item.text()).toContain(`Preemptible${instanceType.Preemptible.toString()}`); expect(item.text()).toContain(`Max disk request${formatCWLResourceSize(instanceType.IncludedScratch)} (${formatFileSize(instanceType.IncludedScratch)})`); if (instanceType.CUDA && instanceType.CUDA.DeviceCount > 0) { expect(item.text()).toContain(`CUDA GPUs${instanceType.CUDA.DeviceCount}`); expect(item.text()).toContain(`Hardware capability${instanceType.CUDA.HardwareCapability}`); expect(item.text()).toContain(`Driver version${instanceType.CUDA.DriverVersion}`); } }); }); }); describe('calculateKeepBufferOverhead', () => { it('should calculate correct buffer size', () => { const testCases = [ {input: 0, output: (220<<20)}, {input: 1, output: (220<<20) + ((1<<26) * (11/10))}, {input: 2, output: (220<<20) + 2*((1<<26) * (11/10))}, ]; for (const {input, output} of testCases) { expect(calculateKeepBufferOverhead(input)).toBe(output); } }); }); describe('discountRamByPercent', () => { it('should inflate ram requirement by 5% of final amount', () => { const testCases = [ {input: 0, output: 0}, {input: 114, output: 120}, ]; for (const {input, output} of testCases) { expect(discountRamByPercent(input)).toBe(output); } }); });