| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- import { mount } from '@vue/test-utils'
- import * as R from 'ramda'
- import DataDisk from '../index'
- import { diskValidator } from '@Compute/utils/createServer'
- import Disk from '@Compute/sections/Disk'
- import { isRequired } from '@/utils/validate'
- import i18n from '@/locales'
- let decorator = null
- let store = null
- let setFieldsValue = null
- let getFieldsValue = null
- let wrapper = null
- const type = 'idc'
- const hypervisor = 'kvm'
- const sku = {
- attached_disk_count: 0,
- attached_disk_size_gb: 0,
- can_delete: false,
- can_update: true,
- cloudregion_id: 'default',
- cpu_core_count: 2,
- created_at: '2019-01-08T04:51:02.000000Z',
- data_disk_max_count: 0,
- deleted: false,
- enabled: true,
- gpu_attachable: true,
- gpu_count: 0,
- gpu_max_count: 0,
- id: '540445d3-83e4-4881-8c66-e58fec6b77e4',
- instance_type_category: 'general_purpose',
- instance_type_family: 'g1',
- is_emulated: false,
- local_category: 'general_purpose',
- memory_size_mb: 2048,
- name: 'ecs.g1.c2m2',
- nic_max_count: 1,
- os_name: 'Any',
- postpaid_status: 'available',
- prepaid_status: 'available',
- provider: 'OneCloud',
- region: 'Default',
- region_ext_id: '',
- status: 'ready',
- sys_disk_max_size_gb: 0,
- sys_disk_min_size_gb: 0,
- sys_disk_resizable: true,
- sys_disk_type: 'local',
- total_guest_count: 17,
- update_version: 3,
- updated_at: '2019-07-18T02:12:11.000000Z',
- }
- const capabilityData = {
- brands: ['Ceph', 'VMware', 'S3', 'OneCloud'],
- compute_engine_brands: ['VMware', 'OneCloud'],
- data_storage_types: ['rbd/rotate', 'local/rotate'],
- data_storage_types2: {
- baremetal: [],
- kvm: ['rbd/rotate', 'local/rotate'],
- },
- disabled_brands: [],
- disabled_compute_engine_brands: [],
- disabled_network_manage_brands: [],
- disabled_object_storage_brands: [],
- gpu_models: ['GeForce GTX 1050 Ti', 'Quadro FX 580'],
- hypervisors: ['baremetal', 'kvm'],
- max_data_disk_count: 12,
- max_nic_count: 8,
- min_data_disk_count: 0,
- min_nic_count: 1,
- network_manage_brands: ['OneCloud'],
- object_storage_brands: ['Ceph', 'S3'],
- public_network_count: 3,
- resource_types: ['shared'],
- sched_policy_support: true,
- specs: {
- hosts: {
- 'cpu:24/manufacture:LENOVO/mem:128738M/model:PC0169QS/nic:1': {
- count: 1,
- cpu: 24,
- manufacture: 'LENOVO',
- mem: 128738,
- model: 'PC0169QS',
- nic_count: 1,
- },
- 'cpu:40/manufacture:Hewlett-Packard/mem:257773M/model:HP Z820 Workstation/nic:1': {
- count: 2,
- cpu: 40,
- manufacture: 'Hewlett-Packard',
- mem: 257773,
- model: 'HP Z820 Workstation',
- nic_count: 1,
- },
- },
- isolated_devices: {
- 'model:Quadro FX 580/type:GPU-HPC/vendor:NVIDIA': {
- count: 1,
- dev_type: 'GPU-HPC',
- model: 'Quadro FX 580',
- pci_id: '10de:0659',
- vendor: 'NVIDIA',
- },
- },
- },
- storage_types: ['rbd/rotate', 'local/rotate'],
- storage_types2: { baremetal: [], kvm: ['rbd/rotate', 'local/rotate'] },
- usable: true,
- }
- beforeEach(() => {
- decorator = {
- type: i => [
- `dataDiskTypes[${i}]`,
- {
- rules: [
- { validator: isRequired(), message: i18n.t('compute.text_121') },
- ],
- },
- ],
- size: i => [
- `dataDiskSizes[${i}]`,
- {
- rules: [
- { required: true, message: i18n.t('compute.text_122') },
- ],
- },
- ],
- schedtag: i => [
- `dataDiskSchedtags[${i}]`,
- {
- validateTrigger: ['change', 'blur'],
- rules: [{
- required: true,
- message: i18n.t('compute.text_123'),
- }],
- },
- ],
- policy: i => [
- `dataDiskPolicys[${i}]`,
- {
- validateTrigger: ['blur', 'change'],
- rules: [{
- required: true,
- message: i18n.t('compute.text_123'),
- }],
- },
- ],
- snapshot: i => [
- `dataDiskSnapshots[${i}]`,
- {
- validateTrigger: ['blur', 'change'],
- rules: [{
- required: true,
- message: i18n.t('compute.text_124'),
- }],
- },
- ],
- filetype: i => [
- `dataDiskFiletypes[${i}]`,
- {
- validateTrigger: ['blur', 'change'],
- rules: [{
- required: true,
- message: i18n.t('compute.text_125'),
- }],
- },
- ],
- mountPath: i => [
- `dataDiskMountPaths[${i}]`,
- {
- validateTrigger: ['blur', 'change'],
- rules: [{
- required: true,
- message: i18n.t('compute.text_126'),
- }, {
- validator: diskValidator,
- }],
- },
- ],
- }
- store = {
- getters: {
- isAdminMode: () => true,
- scope: () => 'system',
- },
- }
- setFieldsValue = jest.fn()
- getFieldsValue = jest.fn()
- wrapper = mount(DataDisk, {
- propsData: {
- decorator,
- type,
- hypervisor,
- sku,
- capabilityData,
- },
- provide () {
- return {
- form: {
- fc: {
- setFieldsValue,
- getFieldsValue,
- },
- },
- }
- },
- store,
- })
- })
- expect.extend({
- haveSizeAndType (obj) {
- const result = {
- message: () => '',
- pass: true,
- }
- const keys = Object.keys(obj)
- const valid = keys.every(k => {
- const val = obj[k]
- if (k.startsWith('dataDiskSizes')) {
- return R.is(Number, val) && val >= 10
- }
- if (k.startsWith('dataDiskTypes')) {
- return R.is(Object, val) && !R.isEmpty(val.key)
- }
- return true
- })
- if (!valid) {
- result.pass = false
- result.message = () => i18n.t('compute.text_127', [JSON.stringify(obj)])
- }
- return result
- },
- })
- describe('DataDisk kvm', () => {
- it('check add once', () => {
- wrapper.vm.add()
- wrapper.vm.$nextTick(() => {
- expect(setFieldsValue.mock.instances[0].setFieldsValue).toHaveBeenCalled()
- expect(setFieldsValue.mock.calls[0][0]).haveSizeAndType()
- expect(wrapper.vm.$el).toMatchSnapshot()
- })
- })
- it('check add twice', () => {
- wrapper.vm.add()
- wrapper.vm.add()
- wrapper.vm.$nextTick(() => {
- expect(setFieldsValue.mock.instances[0].setFieldsValue).toHaveBeenCalled()
- expect(setFieldsValue.mock.calls[0][0]).haveSizeAndType()
- expect(setFieldsValue.mock.calls[1][0]).haveSizeAndType()
- expect(wrapper.vm.$el).toMatchSnapshot()
- })
- })
- it('check add twice and decrease once', () => {
- wrapper.vm.add()
- wrapper.vm.add()
- const firstKey = wrapper.vm.dataDisks[0].key
- const secondKey = wrapper.vm.dataDisks[1].key
- wrapper.vm.decrease(firstKey)
- expect(wrapper.vm.dataDisks[0].key).toBe(secondKey)
- })
- it('check diskTypeChange', () => {
- wrapper.vm.add()
- wrapper.vm.add()
- wrapper.find(Disk).vm.$emit('diskTypeChange', {
- key: 'rbd',
- label: 'Ceph RBD',
- })
- wrapper.vm.$nextTick(() => {
- expect(wrapper.vm.dataDisks[0].diskType.key).toBe('rbd')
- expect(wrapper.vm.$el).toMatchSnapshot()
- })
- })
- // 如果磁盘类别里面有本地磁盘,优先本地磁盘作为第一项
- it('check add once, diskType is local', () => {
- if (wrapper.vm.typesMap.local) {
- expect(Object.keys(wrapper.vm.typesMap)[0]).toBe('local')
- }
- })
- })
|