From 4ba3b6091438acc996db58c4aa9db0ba59f67285 Mon Sep 17 00:00:00 2001 From: Cheng-Chin Chiang Date: Tue, 11 Nov 2025 13:34:06 +0800 Subject: [PATCH 1/7] Update the names and paths of the sample images used for testing --- src/performance/PERF_CONTOUR_DATA_Mode0.test.ts | 2 +- src/performance/PERF_CONTOUR_DATA_Mode1.test.ts | 2 +- src/performance/PERF_CONTOUR_DATA_Mode2.test.ts | 2 +- src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts | 4 ++-- src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts | 4 ++-- src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts | 4 ++-- src/performance/PERF_LOAD_IMAGE_CASA.test.ts | 4 ++-- src/performance/PERF_LOAD_IMAGE_FITS.test.ts | 4 ++-- src/performance/PERF_LOAD_IMAGE_HDF5.test.ts | 4 ++-- src/performance/PERF_MOMENTS_CASA.test.ts | 2 +- src/performance/PERF_MOMENTS_FITS.test.ts | 2 +- src/performance/PERF_MOMENTS_HDF5.test.ts | 2 +- src/performance/PERF_PV_CASA.test.ts | 4 ++-- src/performance/PERF_PV_FITS.test.ts | 4 ++-- src/performance/PERF_PV_HDF5.test.ts | 4 ++-- src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts | 4 ++-- src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts | 4 ++-- src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts | 4 ++-- src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts | 4 ++-- src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts | 4 ++-- src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts | 4 ++-- src/performance/config.json | 2 +- 22 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts index 649208e..91f1b24 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts @@ -4,7 +4,7 @@ import { MessageController } from "./MessageController"; import config from "./config.json"; let testServerUrl: string = config.serverURL0; -let testSubdirectory: string = config.path.QA; +let testSubdirectory: string = config.path.performance; let connectTimeout: number = config.timeout.connection; let openFileTimeout: number = config.timeout.openFile; let readFileTimeout: number = config.timeout.readFile; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts index bc19ade..c047991 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts @@ -4,7 +4,7 @@ import { MessageController } from "./MessageController"; import config from "./config.json"; let testServerUrl: string = config.serverURL0; -let testSubdirectory: string = config.path.QA; +let testSubdirectory: string = config.path.performance; let connectTimeout: number = config.timeout.connection; let openFileTimeout: number = config.timeout.openFile; let readFileTimeout: number = config.timeout.readFile; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts index bad564f..6de71e8 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts @@ -4,7 +4,7 @@ import { MessageController } from "./MessageController"; import config from "./config.json"; let testServerUrl: string = config.serverURL0; -let testSubdirectory: string = config.path.QA; +let testSubdirectory: string = config.path.performance; let connectTimeout: number = config.timeout.connection; let openFileTimeout: number = config.timeout.openFile; let readFileTimeout: number = config.timeout.readFile; diff --git a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts index 9f48a09..9f8a002 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.image", + directory: testSubdirectory, + file: "cube_B_06400_z00100.image", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts index cf24fb6..88d45c6 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.fits", + directory: testSubdirectory, + file: "cube_B_06400_z00100.fits", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts index 04b28d9..9c3c0d2 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.hdf5", + directory: testSubdirectory, + file: "cube_B_06400_z00100.hdf5", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts index a0ff831..54d8923 100644 --- a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts @@ -18,8 +18,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.image", + directory: testSubdirectory, + file: "cube_B_06400_z00100.image", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts index 4ff7f38..ecb428a 100644 --- a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts @@ -18,8 +18,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.fits", + directory: testSubdirectory, + file: "cube_B_06400_z00100.fits", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts index 1b888b3..67fda23 100644 --- a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts @@ -18,8 +18,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.hdf5", + directory: testSubdirectory, + file: "cube_B_06400_z00100.hdf5", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_MOMENTS_CASA.test.ts b/src/performance/PERF_MOMENTS_CASA.test.ts index 60386bd..28d9558 100644 --- a/src/performance/PERF_MOMENTS_CASA.test.ts +++ b/src/performance/PERF_MOMENTS_CASA.test.ts @@ -24,7 +24,7 @@ let assertItem: AssertItem = { precisionDigit: 4, openFile: [ { - directory: testSubdirectory + "/cube_B", + directory: testSubdirectory, file: "S255_IR_sci.spw25.cube.I.pbcor.image", hdu: "0", fileId: 0, diff --git a/src/performance/PERF_MOMENTS_FITS.test.ts b/src/performance/PERF_MOMENTS_FITS.test.ts index a45d2ea..a872fa8 100644 --- a/src/performance/PERF_MOMENTS_FITS.test.ts +++ b/src/performance/PERF_MOMENTS_FITS.test.ts @@ -24,7 +24,7 @@ let assertItem: AssertItem = { precisionDigit: 4, openFile: [ { - directory: testSubdirectory + "/cube_B", + directory: testSubdirectory, file: "S255_IR_sci.spw25.cube.I.pbcor.fits", hdu: "0", fileId: 0, diff --git a/src/performance/PERF_MOMENTS_HDF5.test.ts b/src/performance/PERF_MOMENTS_HDF5.test.ts index 78d3be0..181dc68 100644 --- a/src/performance/PERF_MOMENTS_HDF5.test.ts +++ b/src/performance/PERF_MOMENTS_HDF5.test.ts @@ -24,7 +24,7 @@ let assertItem: AssertItem = { precisionDigit: 4, openFile: [ { - directory: testSubdirectory + "/cube_B", + directory: testSubdirectory, file: "S255_IR_sci.spw25.cube.I.pbcor.hdf5", hdu: "0", fileId: 0, diff --git a/src/performance/PERF_PV_CASA.test.ts b/src/performance/PERF_PV_CASA.test.ts index cb06f7e..2729dd0 100644 --- a/src/performance/PERF_PV_CASA.test.ts +++ b/src/performance/PERF_PV_CASA.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { openFile: { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.image", + directory: testSubdirectory, + file: "cube_B_06400_z00100.image", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_PV_FITS.test.ts b/src/performance/PERF_PV_FITS.test.ts index a593192..6303d69 100644 --- a/src/performance/PERF_PV_FITS.test.ts +++ b/src/performance/PERF_PV_FITS.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { openFile: { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.fits", + directory: testSubdirectory, + file: "cube_B_06400_z00100.fits", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_PV_HDF5.test.ts b/src/performance/PERF_PV_HDF5.test.ts index 98af5d2..1586128 100644 --- a/src/performance/PERF_PV_HDF5.test.ts +++ b/src/performance/PERF_PV_HDF5.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { openFile: { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.hdf5", + directory: testSubdirectory, + file: "cube_B_06400_z00100.hdf5", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts index b437080..0b04202 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.image", + directory: testSubdirectory, + file: "cube_B_06400_z00100.image", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts index 4fa47ac..2bd53b7 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.fits", + directory: testSubdirectory, + file: "cube_B_06400_z00100.fits", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts index c803634..1caba0f 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts @@ -20,8 +20,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.hdf5", + directory: testSubdirectory, + file: "cube_B_06400_z00100.hdf5", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts index 7e3491d..e599c72 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts @@ -23,8 +23,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_01600_z01000.image", + directory: testSubdirectory, + file: "cube_B_03200_z01000.image", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts index b5e63c2..dd508a9 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts @@ -23,8 +23,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_01600_z01000.fits", + directory: testSubdirectory, + file: "cube_B_03200_z01000.fits", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts index d4edd77..cc510b5 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts @@ -23,8 +23,8 @@ interface AssertItem { let assertItem: AssertItem = { fileOpen: [ { - directory: testSubdirectory + "/cube_B", - file: "cube_B_01600_z01000.hdf5", + directory: testSubdirectory, + file: "cube_B_03200_z01000.hdf5", hdu: "0", fileId: 0, renderMode: CARTA.RenderMode.RASTER, diff --git a/src/performance/config.json b/src/performance/config.json index 05e2a4d..f1918b5 100644 --- a/src/performance/config.json +++ b/src/performance/config.json @@ -1,5 +1,5 @@ { - "serverURL0": "ws://127.0.0.1:3006", + "serverURL0": "ws://127.0.0.1:3002", "path": { "root": ".", "base": "$BASE", From 929c4cd1d29c706e1a191e3c200982ec58b3fdae Mon Sep 17 00:00:00 2001 From: Cheng-Chin Chiang Date: Wed, 12 Nov 2025 09:40:35 +0800 Subject: [PATCH 2/7] Update the MessageController, myClient and config codes --- src/performance/MessageController.ts | 776 ++++++++++++++++++++------- src/performance/MyParsing.ts | 145 +++++ src/performance/config.json | 11 +- src/performance/myClient.ts | 160 +++--- 4 files changed, 838 insertions(+), 254 deletions(-) create mode 100644 src/performance/MyParsing.ts diff --git a/src/performance/MessageController.ts b/src/performance/MessageController.ts index 4f46e7c..3d0ffaf 100644 --- a/src/performance/MessageController.ts +++ b/src/performance/MessageController.ts @@ -1,14 +1,16 @@ -import {action, makeObservable, observable, runInAction} from "mobx"; -import {CARTA} from "carta-protobuf"; -import {Subject, throwError} from "rxjs"; -import { mapToObject } from "./parsing"; +import { action, makeObservable, observable, runInAction } from 'mobx'; +import { CARTA } from 'carta-protobuf'; +import { Subject, throwError } from 'rxjs'; +import { mapToObject } from './MyParsing'; import IRegionInfo = CARTA.IRegionInfo; -const WebSocket = require("ws"); +import WebSocket from 'ws'; +import config from './config.json'; +const icdVersion = config.icdVersion; export enum ConnectionStatus { CLOSED = 0, PENDING = 1, - ACTIVE = 2 + ACTIVE = 2, } export const INVALID_ANIMATION_ID = -1; @@ -53,8 +55,9 @@ export class MessageController { return MessageController.staticInstance; } - private static readonly IcdVersion = 30; - private static readonly DefaultFeatureFlags = CARTA.ClientFeatureFlags.WEB_ASSEMBLY | CARTA.ClientFeatureFlags.WEB_GL; + private static readonly IcdVersion = icdVersion; + private static readonly DefaultFeatureFlags = + CARTA.ClientFeatureFlags.WEB_ASSEMBLY | CARTA.ClientFeatureFlags.WEB_GL; private static readonly MaxConnectionAttempts = 15; private static readonly ConnectionAttemptDelay = 1000; @@ -91,7 +94,7 @@ export class MessageController { readonly fittingProgressStream: Subject; readonly vectorTileStream: Subject; readonly pvPreviewStream: Subject; - private readonly decoderMap: Map; + private readonly decoderMap: Map; private constructor() { this.count = 0; @@ -122,50 +125,266 @@ export class MessageController { this.pvPreviewStream = new Subject(); // Construct handler and decoder maps - this.decoderMap = new Map([ - [CARTA.EventType.REGISTER_VIEWER_ACK, {messageClass: CARTA.RegisterViewerAck, handler: this.onRegisterViewerAck}], - [CARTA.EventType.FILE_LIST_RESPONSE, {messageClass: CARTA.FileListResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.REGION_LIST_RESPONSE, {messageClass: CARTA.RegionListResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.CATALOG_LIST_RESPONSE, {messageClass: CARTA.CatalogListResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.FILE_LIST_PROGRESS, {messageClass: CARTA.ListProgress, handler: this.onStreamedListProgress}], - [CARTA.EventType.FILE_INFO_RESPONSE, {messageClass: CARTA.FileInfoResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.REGION_FILE_INFO_RESPONSE, {messageClass: CARTA.RegionFileInfoResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.CATALOG_FILE_INFO_RESPONSE, {messageClass: CARTA.CatalogFileInfoResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.OPEN_FILE_ACK, {messageClass: CARTA.OpenFileAck, handler: this.onDeferredResponse}], - [CARTA.EventType.SAVE_FILE_ACK, {messageClass: CARTA.SaveFileAck, handler: this.onSaveFileAndRegionAck}], - [CARTA.EventType.OPEN_CATALOG_FILE_ACK, {messageClass: CARTA.OpenCatalogFileAck, handler: this.onDeferredResponse}], - [CARTA.EventType.IMPORT_REGION_ACK, {messageClass: CARTA.ImportRegionAck, handler: this.onDeferredResponse}], - [CARTA.EventType.EXPORT_REGION_ACK, {messageClass: CARTA.ExportRegionAck, handler: this.onSaveFileAndRegionAck}], - [CARTA.EventType.SET_REGION_ACK, {messageClass: CARTA.SetRegionAck, handler: this.onDeferredResponse}], - [CARTA.EventType.RESUME_SESSION_ACK, {messageClass: CARTA.ResumeSessionAck, handler: this.onDeferredResponse}], - [CARTA.EventType.START_ANIMATION_ACK, {messageClass: CARTA.StartAnimationAck, handler: this.onStartAnimationAck}], - [CARTA.EventType.RASTER_TILE_DATA, {messageClass: CARTA.RasterTileData, handler: this.onStreamedRasterTileData}], - [CARTA.EventType.REGION_HISTOGRAM_DATA, {messageClass: CARTA.RegionHistogramData, handler: this.onStreamedRegionHistogramData}], - [CARTA.EventType.ERROR_DATA, {messageClass: CARTA.ErrorData, handler: this.onStreamedErrorData}], - [CARTA.EventType.SPATIAL_PROFILE_DATA, {messageClass: CARTA.SpatialProfileData, handler: this.onStreamedSpatialProfileData}], - [CARTA.EventType.SPECTRAL_PROFILE_DATA, {messageClass: CARTA.SpectralProfileData, handler: this.onStreamedSpectralProfileData}], - [CARTA.EventType.REGION_STATS_DATA, {messageClass: CARTA.RegionStatsData, handler: this.onStreamedRegionStatsData}], - [CARTA.EventType.CONTOUR_IMAGE_DATA, {messageClass: CARTA.ContourImageData, handler: this.onStreamedContourData}], - [CARTA.EventType.CATALOG_FILTER_RESPONSE, {messageClass: CARTA.CatalogFilterResponse, handler: this.onStreamedCatalogData}], - [CARTA.EventType.RASTER_TILE_SYNC, {messageClass: CARTA.RasterTileSync, handler: this.onStreamedRasterSync}], - [CARTA.EventType.MOMENT_PROGRESS, {messageClass: CARTA.MomentProgress, handler: this.onStreamedMomentProgress}], - [CARTA.EventType.MOMENT_RESPONSE, {messageClass: CARTA.MomentResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.SCRIPTING_REQUEST, {messageClass: CARTA.ScriptingRequest, handler: this.onScriptingRequest}], - [CARTA.EventType.CONCAT_STOKES_FILES_ACK, {messageClass: CARTA.ConcatStokesFilesAck, handler: this.onDeferredResponse}], - [CARTA.EventType.PV_PROGRESS, {messageClass: CARTA.PvProgress, handler: this.onStreamedPvProgress}], - [CARTA.EventType.PV_RESPONSE, {messageClass: CARTA.PvResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.FITTING_PROGRESS, {messageClass: CARTA.FittingProgress, handler: this.onStreamedFittingProgress}], - [CARTA.EventType.FITTING_RESPONSE, {messageClass: CARTA.FittingResponse, handler: this.onDeferredResponse}], - [CARTA.EventType.VECTOR_OVERLAY_TILE_DATA, {messageClass: CARTA.VectorOverlayTileData, handler: this.onStreamedVectorOverlayData}], - [CARTA.EventType.PV_PREVIEW_DATA, {messageClass: CARTA.PvPreviewData, handler: this.onStreamedPvPreviewData}], - [CARTA.EventType.REMOTE_FILE_RESPONSE, {messageClass: CARTA.RemoteFileResponse, handler: this.onDeferredResponse}] + this.decoderMap = new Map([ + [ + CARTA.EventType.REGISTER_VIEWER_ACK, + { + messageClass: CARTA.RegisterViewerAck, + handler: this.onRegisterViewerAck, + }, + ], + [ + CARTA.EventType.FILE_LIST_RESPONSE, + { + messageClass: CARTA.FileListResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.REGION_LIST_RESPONSE, + { + messageClass: CARTA.RegionListResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.CATALOG_LIST_RESPONSE, + { + messageClass: CARTA.CatalogListResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.FILE_LIST_PROGRESS, + { + messageClass: CARTA.ListProgress, + handler: this.onStreamedListProgress, + }, + ], + [ + CARTA.EventType.FILE_INFO_RESPONSE, + { + messageClass: CARTA.FileInfoResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.REGION_FILE_INFO_RESPONSE, + { + messageClass: CARTA.RegionFileInfoResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.CATALOG_FILE_INFO_RESPONSE, + { + messageClass: CARTA.CatalogFileInfoResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.OPEN_FILE_ACK, + { + messageClass: CARTA.OpenFileAck, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.SAVE_FILE_ACK, + { + messageClass: CARTA.SaveFileAck, + handler: this.onSaveFileAndRegionAck, + }, + ], + [ + CARTA.EventType.OPEN_CATALOG_FILE_ACK, + { + messageClass: CARTA.OpenCatalogFileAck, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.IMPORT_REGION_ACK, + { + messageClass: CARTA.ImportRegionAck, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.EXPORT_REGION_ACK, + { + messageClass: CARTA.ExportRegionAck, + handler: this.onSaveFileAndRegionAck, + }, + ], + [ + CARTA.EventType.SET_REGION_ACK, + { + messageClass: CARTA.SetRegionAck, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.RESUME_SESSION_ACK, + { + messageClass: CARTA.ResumeSessionAck, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.START_ANIMATION_ACK, + { + messageClass: CARTA.StartAnimationAck, + handler: this.onStartAnimationAck, + }, + ], + [ + CARTA.EventType.RASTER_TILE_DATA, + { + messageClass: CARTA.RasterTileData, + handler: this.onStreamedRasterTileData, + }, + ], + [ + CARTA.EventType.REGION_HISTOGRAM_DATA, + { + messageClass: CARTA.RegionHistogramData, + handler: this.onStreamedRegionHistogramData, + }, + ], + [ + CARTA.EventType.ERROR_DATA, + { + messageClass: CARTA.ErrorData, + handler: this.onStreamedErrorData, + }, + ], + [ + CARTA.EventType.SPATIAL_PROFILE_DATA, + { + messageClass: CARTA.SpatialProfileData, + handler: this.onStreamedSpatialProfileData, + }, + ], + [ + CARTA.EventType.SPECTRAL_PROFILE_DATA, + { + messageClass: CARTA.SpectralProfileData, + handler: this.onStreamedSpectralProfileData, + }, + ], + [ + CARTA.EventType.REGION_STATS_DATA, + { + messageClass: CARTA.RegionStatsData, + handler: this.onStreamedRegionStatsData, + }, + ], + [ + CARTA.EventType.CONTOUR_IMAGE_DATA, + { + messageClass: CARTA.ContourImageData, + handler: this.onStreamedContourData, + }, + ], + [ + CARTA.EventType.CATALOG_FILTER_RESPONSE, + { + messageClass: CARTA.CatalogFilterResponse, + handler: this.onStreamedCatalogData, + }, + ], + [ + CARTA.EventType.RASTER_TILE_SYNC, + { + messageClass: CARTA.RasterTileSync, + handler: this.onStreamedRasterSync, + }, + ], + [ + CARTA.EventType.MOMENT_PROGRESS, + { + messageClass: CARTA.MomentProgress, + handler: this.onStreamedMomentProgress, + }, + ], + [ + CARTA.EventType.MOMENT_RESPONSE, + { + messageClass: CARTA.MomentResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.SCRIPTING_REQUEST, + { + messageClass: CARTA.ScriptingRequest, + handler: this.onScriptingRequest, + }, + ], + [ + CARTA.EventType.CONCAT_STOKES_FILES_ACK, + { + messageClass: CARTA.ConcatStokesFilesAck, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.PV_PROGRESS, + { + messageClass: CARTA.PvProgress, + handler: this.onStreamedPvProgress, + }, + ], + [ + CARTA.EventType.PV_RESPONSE, + { + messageClass: CARTA.PvResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.FITTING_PROGRESS, + { + messageClass: CARTA.FittingProgress, + handler: this.onStreamedFittingProgress, + }, + ], + [ + CARTA.EventType.FITTING_RESPONSE, + { + messageClass: CARTA.FittingResponse, + handler: this.onDeferredResponse, + }, + ], + [ + CARTA.EventType.VECTOR_OVERLAY_TILE_DATA, + { + messageClass: CARTA.VectorOverlayTileData, + handler: this.onStreamedVectorOverlayData, + }, + ], + [ + CARTA.EventType.PV_PREVIEW_DATA, + { + messageClass: CARTA.PvPreviewData, + handler: this.onStreamedPvPreviewData, + }, + ], + [ + CARTA.EventType.REMOTE_FILE_RESPONSE, + { + messageClass: CARTA.RemoteFileResponse, + handler: this.onDeferredResponse, + }, + ], ]); // check ping every 5 seconds // setInterval(this.sendPing, 5000); } - @action("connect") + @action('connect') async connect(url: string): Promise { if (this.connection) { this.connection.onclose = null; @@ -178,18 +397,22 @@ export class MessageController { this.connectionStatus = ConnectionStatus.PENDING; this.serverUrl = url; this.connection = new WebSocket(url); - this.connection.binaryType = "arraybuffer"; + this.connection.binaryType = 'arraybuffer'; this.connection.onmessage = this.messageHandler.bind(this); this.connection.onclose = (ev: CloseEvent) => runInAction(() => { // Only change to closed connection if the connection was originally active or this is a reconnection - if (this.connectionStatus === ConnectionStatus.ACTIVE || isReconnection || connectionAttempts >= MessageController.MaxConnectionAttempts) { + if ( + this.connectionStatus === ConnectionStatus.ACTIVE || + isReconnection || + connectionAttempts >= MessageController.MaxConnectionAttempts + ) { this.connectionStatus = ConnectionStatus.CLOSED; } else { connectionAttempts++; setTimeout(() => { const newConnection = new WebSocket(url); - newConnection.binaryType = "arraybuffer"; + newConnection.binaryType = 'arraybuffer'; newConnection.onopen = this.connection.onopen; newConnection.onerror = this.connection.onerror; newConnection.onclose = this.connection.onclose; @@ -211,18 +434,21 @@ export class MessageController { this.connectionDropped = true; } this.connectionStatus = ConnectionStatus.ACTIVE; - const message = CARTA.RegisterViewer.create({sessionId: this.sessionId, clientFeatureFlags: MessageController.DefaultFeatureFlags}); + const message = CARTA.RegisterViewer.create({ + sessionId: this.sessionId, + clientFeatureFlags: MessageController.DefaultFeatureFlags, + }); // observer map is cleared, so that old subscriptions don't get incorrectly fired this.logEvent(CARTA.EventType.REGISTER_VIEWER, requestId, message, false); if (this.sendEvent(CARTA.EventType.REGISTER_VIEWER, CARTA.RegisterViewer.encode(message).finish())) { this.deferredMap.set(requestId, deferredResponse); } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } }); - this.connection.onerror = ev => { + this.connection.onerror = (ev) => { // AppStore.Instance.logStore.addInfo(`Connecting to server ${url} failed.`, ["network"]); console.log(ev); }; @@ -234,21 +460,27 @@ export class MessageController { if (this.connection && this.connectionStatus !== ConnectionStatus.CLOSED) { this.connection.close(); } - } + }; checkConnectionStatus = () => { return this.connectionStatus; - } + }; @action updateEndToEndPing = () => { this.endToEndPing = this.lastPongTime - this.lastPingTime; }; - async getFileList(directory: string | null, filterMode: CARTA.FileListFilterMode): Promise { + async getFileList( + directory: string | null, + filterMode: CARTA.FileListFilterMode + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.FileListRequest.create({directory, filterMode}); + const message = CARTA.FileListRequest.create({ + directory, + filterMode, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.FILE_LIST_REQUEST, requestId, message, false); if (this.sendEvent(CARTA.EventType.FILE_LIST_REQUEST, CARTA.FileListRequest.encode(message).finish())) { @@ -256,16 +488,22 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async getRegionList(directory: string | null, filterMode: CARTA.FileListFilterMode): Promise { + async getRegionList( + directory: string | null, + filterMode: CARTA.FileListFilterMode + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.RegionListRequest.create({directory, filterMode}); + const message = CARTA.RegionListRequest.create({ + directory, + filterMode, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.REGION_LIST_REQUEST, requestId, message, false); if (this.sendEvent(CARTA.EventType.REGION_LIST_REQUEST, CARTA.RegionListRequest.encode(message).finish())) { @@ -273,34 +511,51 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async getCatalogList(directory: string | null, filterMode: CARTA.FileListFilterMode): Promise { + async getCatalogList( + directory: string | null, + filterMode: CARTA.FileListFilterMode + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.CatalogListRequest.create({directory, filterMode}); + const message = CARTA.CatalogListRequest.create({ + directory, + filterMode, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.CATALOG_LIST_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.CATALOG_LIST_REQUEST, CARTA.CatalogListRequest.encode(message).finish())) { + if ( + this.sendEvent(CARTA.EventType.CATALOG_LIST_REQUEST, CARTA.CatalogListRequest.encode(message).finish()) + ) { const deferredResponse = new Deferred(); this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async getFileInfo(directory: string | null | undefined, file: string | null | undefined, hdu: string | null | undefined): Promise { + async getFileInfo( + directory: string | null | undefined, + file: string | null | undefined, + hdu: string | null | undefined + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const supportAipsBeam = false; - const message = CARTA.FileInfoRequest.create({directory, file, hdu, supportAipsBeam}); + const message = CARTA.FileInfoRequest.create({ + directory, + file, + hdu, + supportAipsBeam, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.FILE_INFO_REQUEST, requestId, message, false); if (this.sendEvent(CARTA.EventType.FILE_INFO_REQUEST, CARTA.FileInfoRequest.encode(message).finish())) { @@ -308,50 +563,82 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async getRegionFileInfo(directory: string | null | undefined, file: string | null | undefined): Promise { + async getRegionFileInfo( + directory: string | null | undefined, + file: string | null | undefined + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.RegionFileInfoRequest.create({directory, file}); + const message = CARTA.RegionFileInfoRequest.create({ + directory, + file, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.REGION_FILE_INFO_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.REGION_FILE_INFO_REQUEST, CARTA.RegionFileInfoRequest.encode(message).finish())) { + if ( + this.sendEvent( + CARTA.EventType.REGION_FILE_INFO_REQUEST, + CARTA.RegionFileInfoRequest.encode(message).finish() + ) + ) { const deferredResponse = new Deferred(); this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async getCatalogFileInfo(directory: string | null | undefined, name: string | null | undefined): Promise { + async getCatalogFileInfo( + directory: string | null | undefined, + name: string | null | undefined + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.CatalogFileInfoRequest.create({directory, name}); + const message = CARTA.CatalogFileInfoRequest.create({ + directory, + name, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.CATALOG_FILE_INFO_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.CATALOG_FILE_INFO_REQUEST, CARTA.CatalogFileInfoRequest.encode(message).finish())) { + if ( + this.sendEvent( + CARTA.EventType.CATALOG_FILE_INFO_REQUEST, + CARTA.CatalogFileInfoRequest.encode(message).finish() + ) + ) { const deferredResponse = new Deferred(); this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async importRegion(directory: string, file: string, type: CARTA.FileType, fileId: number): Promise { + async importRegion( + directory: string, + file: string, + type: CARTA.FileType, + fileId: number + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.ImportRegion.create({directory, file, type, groupId: fileId}); + const message = CARTA.ImportRegion.create({ + directory, + file, + type, + groupId: fileId, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.IMPORT_REGION, requestId, message, false); if (this.sendEvent(CARTA.EventType.IMPORT_REGION, CARTA.ImportRegion.encode(message).finish())) { @@ -359,16 +646,32 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async exportRegion(directory: string, file: string, type: CARTA.FileType, coordType: CARTA.CoordinateType, fileId: number, regionStyles: Map, overwrite: boolean = true): Promise { + async exportRegion( + directory: string, + file: string, + type: CARTA.FileType, + coordType: CARTA.CoordinateType, + fileId: number, + regionStyles: Map, + overwrite: boolean = true + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.ExportRegion.create({directory, file, type, fileId, regionStyles: mapToObject(regionStyles), coordType, overwrite}); + const message = CARTA.ExportRegion.create({ + directory, + file, + type, + fileId, + regionStyles: mapToObject(regionStyles), + coordType, + overwrite, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.EXPORT_REGION, requestId, message, false); if (this.sendEvent(CARTA.EventType.EXPORT_REGION, CARTA.ExportRegion.encode(message).finish())) { @@ -376,7 +679,7 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } @@ -386,9 +689,9 @@ export class MessageController { let file = input.file; let hdu = input.hdu; let fileId = input.fileId; - let imageArithmetic = input.lelExpr + let imageArithmetic = input.lelExpr; if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const message = CARTA.OpenFile.create({ directory, @@ -397,7 +700,7 @@ export class MessageController { fileId, lelExpr: imageArithmetic, renderMode: CARTA.RenderMode.RASTER, - supportAipsBeam: false + supportAipsBeam: false, }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.OPEN_FILE, requestId, message, false); @@ -406,19 +709,23 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async loadStokeFiles(stokesFiles: CARTA.IStokesFile[], fileId: number, renderMode: CARTA.RenderMode): Promise { + async loadStokeFiles( + stokesFiles: CARTA.IStokesFile[], + fileId: number, + renderMode: CARTA.RenderMode + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const concatStokes: CARTA.IConcatStokesFiles = { stokesFiles: stokesFiles, fileId: fileId, - renderMode: renderMode + renderMode: renderMode, }; const message = CARTA.ConcatStokesFiles.create(concatStokes); const requestId = this.eventCounter; @@ -428,16 +735,26 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - async loadCatalogFile(directory: string, name: string, fileId: number, previewDataSize: number): Promise { + async loadCatalogFile( + directory: string, + name: string, + fileId: number, + previewDataSize: number + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.OpenCatalogFile.create({directory, name, fileId, previewDataSize}); + const message = CARTA.OpenCatalogFile.create({ + directory, + name, + fileId, + previewDataSize, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.OPEN_CATALOG_FILE, requestId, message, false); if (this.sendEvent(CARTA.EventType.OPEN_CATALOG_FILE, CARTA.OpenCatalogFile.encode(message).finish())) { @@ -445,15 +762,15 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - @action("close catalog file") + @action('close catalog file') closeCatalogFile(fileId: number): boolean { if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.CloseCatalogFile.create({fileId}); + const message = CARTA.CloseCatalogFile.create({ fileId }); this.logEvent(CARTA.EventType.CLOSE_CATALOG_FILE, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.CLOSE_CATALOG_FILE, CARTA.CloseCatalogFile.encode(message).finish())) { return true; @@ -475,9 +792,20 @@ export class MessageController { overwrite: boolean = true ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.SaveFile.create({fileId, outputFileDirectory, outputFileName, outputFileType, regionId, channels, stokes, keepDegenerate, restFreq, overwrite}); + const message = CARTA.SaveFile.create({ + fileId, + outputFileDirectory, + outputFileName, + outputFileType, + regionId, + channels, + stokes, + keepDegenerate, + restFreq, + overwrite, + }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.SAVE_FILE, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.SAVE_FILE, CARTA.SaveFile.encode(message).finish())) { @@ -485,14 +813,14 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } closeFile(fileId: number): boolean { if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.CloseFile.create({fileId}); + const message = CARTA.CloseFile.create({ fileId }); this.logEvent(CARTA.EventType.CLOSE_FILE, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.CLOSE_FILE, CARTA.CloseFile.encode(message).finish())) { return true; @@ -501,11 +829,25 @@ export class MessageController { return false; } - @action("set channels") - setChannels(fileId: number, channel: number | undefined, stokes: number, requiredTiles: CARTA.IAddRequiredTiles, channelMapEnabled?: boolean, _channelRange?: CARTA.IIntBounds | undefined, currentRange?: CARTA.IIntBounds): boolean { + @action('set channels') + setChannels(input: CARTA.ISetImageChannels): boolean { + let fileId = input.fileId; + let channel = input.channel; + let stokes = input.stokes; + let requiredTiles = input.requiredTiles; + let channelMapEnabled = input.channelMapEnabled; + let channelRange = input.channelRange; + let currentRange = input.currentRange; if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const channelRange: CARTA.IIntBounds | null = _channelRange || null; - const message = CARTA.SetImageChannels.create({fileId, channel, stokes, requiredTiles, channelMapEnabled, channelRange, currentRange}); + const message = CARTA.SetImageChannels.create({ + fileId: fileId, + channel: channel, + stokes: stokes, + requiredTiles: requiredTiles, + channelRange: channelRange, + currentRange: currentRange, + channelMapEnabled: channelMapEnabled, + }); this.logEvent(CARTA.EventType.SET_IMAGE_CHANNELS, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.SET_IMAGE_CHANNELS, CARTA.SetImageChannels.encode(message).finish())) { return true; @@ -514,10 +856,10 @@ export class MessageController { return false; } - @action("set cursor") + @action('set cursor') setCursor(fileId: number, x: number, y: number): boolean { if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.SetCursor.create({fileId, point: {x, y}}); + const message = CARTA.SetCursor.create({ fileId, point: { x, y } }); this.logEvent(CARTA.EventType.SET_CURSOR, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.SET_CURSOR, CARTA.SetCursor.encode(message).finish())) { return true; @@ -534,9 +876,9 @@ export class MessageController { regionInfo: { regionType: region.regionType, rotation: region.rotation, - controlPoints: region.controlPoints.slice() + controlPoints: region.controlPoints.slice(), }, - previewRegion: isRequestingPreview + previewRegion: isRequestingPreview, }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.SET_REGION, requestId, message, false); @@ -547,9 +889,14 @@ export class MessageController { return false; } - async setRegion(fileId: number, regionId: number, region: IRegionInfo, isRequestingPreview?: boolean): Promise { + async setRegion( + fileId: number, + regionId: number, + region: IRegionInfo, + isRequestingPreview?: boolean + ): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const message = CARTA.SetRegion.create({ fileId, @@ -557,9 +904,9 @@ export class MessageController { regionInfo: { regionType: region.regionType, rotation: region.rotation, - controlPoints: region.controlPoints.slice() + controlPoints: region.controlPoints.slice(), }, - previewRegion: isRequestingPreview + previewRegion: isRequestingPreview, }); const requestId = this.eventCounter; this.logEvent(CARTA.EventType.SET_REGION, requestId, message, false); @@ -568,15 +915,15 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - @action("remove region") + @action('remove region') removeRegion(regionId: number) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.RemoveRegion.create({regionId}); + const message = CARTA.RemoveRegion.create({ regionId }); this.logEvent(CARTA.EventType.REMOVE_REGION, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.REMOVE_REGION, CARTA.RemoveRegion.encode(message).finish())) { return true; @@ -585,68 +932,101 @@ export class MessageController { return false; } - @action("set catalog filter") + @action('set catalog filter') setCatalogFilterRequest(filterRequest: CARTA.ICatalogFilterRequest) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.CATALOG_FILTER_REQUEST, this.eventCounter, filterRequest, false); - if (this.sendEvent(CARTA.EventType.CATALOG_FILTER_REQUEST, CARTA.CatalogFilterRequest.encode(filterRequest).finish())) { + if ( + this.sendEvent( + CARTA.EventType.CATALOG_FILTER_REQUEST, + CARTA.CatalogFilterRequest.encode(filterRequest).finish() + ) + ) { return true; } } return false; } - @action("set spatial requirements") + @action('set spatial requirements') setSpatialRequirements(requirementsMessage: CARTA.ISetSpatialRequirements) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.SET_SPATIAL_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if (this.sendEvent(CARTA.EventType.SET_SPATIAL_REQUIREMENTS, CARTA.SetSpatialRequirements.encode(requirementsMessage).finish())) { + if ( + this.sendEvent( + CARTA.EventType.SET_SPATIAL_REQUIREMENTS, + CARTA.SetSpatialRequirements.encode(requirementsMessage).finish() + ) + ) { return true; } } return false; } - @action("set spectral requirements") + @action('set spectral requirements') setSpectralRequirements(requirementsMessage: CARTA.ISetSpectralRequirements) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.SET_SPECTRAL_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if (this.sendEvent(CARTA.EventType.SET_SPECTRAL_REQUIREMENTS, CARTA.SetSpectralRequirements.encode(requirementsMessage).finish())) { + if ( + this.sendEvent( + CARTA.EventType.SET_SPECTRAL_REQUIREMENTS, + CARTA.SetSpectralRequirements.encode(requirementsMessage).finish() + ) + ) { return true; } } return false; } - @action("set stats requirements") + @action('set stats requirements') setStatsRequirements(requirementsMessage: CARTA.ISetStatsRequirements) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.SET_STATS_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if (this.sendEvent(CARTA.EventType.SET_STATS_REQUIREMENTS, CARTA.SetStatsRequirements.encode(requirementsMessage).finish())) { + if ( + this.sendEvent( + CARTA.EventType.SET_STATS_REQUIREMENTS, + CARTA.SetStatsRequirements.encode(requirementsMessage).finish() + ) + ) { return true; } } return false; } - @action("set histogram requirements") + @action('set histogram requirements') setHistogramRequirements(requirementsMessage: CARTA.ISetHistogramRequirements) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.SET_HISTOGRAM_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if (this.sendEvent(CARTA.EventType.SET_HISTOGRAM_REQUIREMENTS, CARTA.SetHistogramRequirements.encode(requirementsMessage).finish())) { + if ( + this.sendEvent( + CARTA.EventType.SET_HISTOGRAM_REQUIREMENTS, + CARTA.SetHistogramRequirements.encode(requirementsMessage).finish() + ) + ) { return true; } } return false; } - @action("add required tiles") + @action('add required tiles') addRequiredTiles(input: CARTA.IAddRequiredTiles): boolean { let fileId = input.fileId; let tiles = input.tiles; + let type = input.compressionType; let quality = input.compressionQuality; + let currentTiles = input.currentTiles; if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.AddRequiredTiles.create({fileId, tiles, compressionQuality: quality, compressionType: CARTA.CompressionType.ZFP}); + const message = CARTA.AddRequiredTiles.create({ + fileId: fileId, + tiles: tiles, + compressionType: type, + compressionQuality: quality, + currentTiles: currentTiles, + }); this.logEvent(CARTA.EventType.ADD_REQUIRED_TILES, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.ADD_REQUIRED_TILES, CARTA.AddRequiredTiles.encode(message).finish())) { return true; @@ -655,12 +1035,17 @@ export class MessageController { return false; } - @action("remove required tiles") + @action('remove required tiles') removeRequiredTiles(fileId: number, tiles: Array): boolean { if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.RemoveRequiredTiles.create({fileId, tiles}); + const message = CARTA.RemoveRequiredTiles.create({ fileId, tiles }); this.logEvent(CARTA.EventType.REMOVE_REQUIRED_TILES, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.REMOVE_REQUIRED_TILES, CARTA.RemoveRequiredTiles.encode(message).finish())) { + if ( + this.sendEvent( + CARTA.EventType.REMOVE_REQUIRED_TILES, + CARTA.RemoveRequiredTiles.encode(message).finish() + ) + ) { return true; } } @@ -669,21 +1054,23 @@ export class MessageController { async startAnimation(animationMessage: CARTA.IStartAnimation): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const requestId = this.eventCounter; this.logEvent(CARTA.EventType.START_ANIMATION, requestId, animationMessage, false); - if (this.sendEvent(CARTA.EventType.START_ANIMATION, CARTA.StartAnimation.encode(animationMessage).finish())) { + if ( + this.sendEvent(CARTA.EventType.START_ANIMATION, CARTA.StartAnimation.encode(animationMessage).finish()) + ) { const deferredResponse = new Deferred(); this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - @action("stop animation") + @action('stop animation') stopAnimation(animationMessage: CARTA.IStopAnimation) { this.animationId = INVALID_ANIMATION_ID; if (this.connectionStatus === ConnectionStatus.ACTIVE) { @@ -695,33 +1082,48 @@ export class MessageController { return false; } - @action("animation flow control") + @action('animation flow control') sendAnimationFlowControl(message: CARTA.IAnimationFlowControl) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.ANIMATION_FLOW_CONTROL, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.ANIMATION_FLOW_CONTROL, CARTA.AnimationFlowControl.encode(message).finish())) { + if ( + this.sendEvent( + CARTA.EventType.ANIMATION_FLOW_CONTROL, + CARTA.AnimationFlowControl.encode(message).finish() + ) + ) { return true; } } return false; } - @action("set contour parameters") + @action('set contour parameters') setContourParameters(message: CARTA.ISetContourParameters) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.SET_CONTOUR_PARAMETERS, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.SET_CONTOUR_PARAMETERS, CARTA.SetContourParameters.encode(message).finish())) { + if ( + this.sendEvent( + CARTA.EventType.SET_CONTOUR_PARAMETERS, + CARTA.SetContourParameters.encode(message).finish() + ) + ) { return true; } } return false; } - @action("set vector overlay parameters") + @action('set vector overlay parameters') setVectorOverlayParameters(message: CARTA.ISetVectorOverlayParameters) { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.SET_VECTOR_OVERLAY_PARAMETERS, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.SET_VECTOR_OVERLAY_PARAMETERS, CARTA.SetVectorOverlayParameters.encode(message).finish())) { + if ( + this.sendEvent( + CARTA.EventType.SET_VECTOR_OVERLAY_PARAMETERS, + CARTA.SetVectorOverlayParameters.encode(message).finish() + ) + ) { return true; } } @@ -730,7 +1132,7 @@ export class MessageController { async resumeSession(message: CARTA.IResumeSession): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const requestId = this.eventCounter; this.logEvent(CARTA.EventType.RESUME_SESSION, requestId, message, false); @@ -739,19 +1141,19 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } - @action("set auth token") + @action('set auth token') setAuthToken = (token: string) => { document.cookie = `CARTA-Authorization=${token}; path=/`; }; async requestMoment(message: CARTA.IMomentRequest): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const requestId = this.eventCounter; this.logEvent(CARTA.EventType.MOMENT_REQUEST, requestId, message, false); @@ -760,41 +1162,43 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } cancelRequestingMoment(fileId: number) { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error("Not connected")); + return throwError(new Error('Not connected')); } else { - const message = CARTA.StopMomentCalc.create({fileId}); + const message = CARTA.StopMomentCalc.create({ fileId }); this.logEvent(CARTA.EventType.STOP_MOMENT_CALC, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.STOP_MOMENT_CALC, CARTA.StopMomentCalc.encode(message).finish())) { return true; } - return throwError(new Error("Could not send event")); + return throwError(new Error('Could not send event')); } } - @action("cancel requesting file list") + @action('cancel requesting file list') cancelRequestingFileList(fileListType: CARTA.FileListType) { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error("Not connected")); + return throwError(new Error('Not connected')); } else { - const message = CARTA.StopFileList.create({fileListType: fileListType}); + const message = CARTA.StopFileList.create({ + fileListType: fileListType, + }); this.logEvent(CARTA.EventType.STOP_FILE_LIST, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.STOP_FILE_LIST, new Uint8Array())) { return true; } - return throwError(new Error("Could not send event")); + return throwError(new Error('Could not send event')); } } async requestPV(message: CARTA.IPvRequest): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const requestId = this.eventCounter; this.logEvent(CARTA.EventType.PV_REQUEST, requestId, message, false); @@ -803,14 +1207,14 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } async requestRemoteFile(message: CARTA.IRemoteFileRequest): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const requestId = this.eventCounter; this.logEvent(CARTA.EventType.REMOTE_FILE_REQUEST, requestId, message, false); @@ -819,54 +1223,54 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } cancelRequestingPV(fileId: number) { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error("Not connected")); + return throwError(new Error('Not connected')); } else { - const message = CARTA.StopPvCalc.create({fileId}); + const message = CARTA.StopPvCalc.create({ fileId }); this.logEvent(CARTA.EventType.STOP_PV_CALC, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.STOP_PV_CALC, CARTA.StopPvCalc.encode(message).finish())) { return true; } - return throwError(new Error("Could not send event")); + return throwError(new Error('Could not send event')); } } stopPvPreview(previewId: number) { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.StopPvPreview.create({previewId}); + const message = CARTA.StopPvPreview.create({ previewId }); this.logEvent(CARTA.EventType.STOP_PV_PREVIEW, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.STOP_PV_PREVIEW, CARTA.StopPvPreview.encode(message).finish())) { - console.log("stop Pv preview sent"); + console.log('stop Pv preview sent'); return true; } - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } closePvPreview(previewId: number) { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { - const message = CARTA.ClosePvPreview.create({previewId}); + const message = CARTA.ClosePvPreview.create({ previewId }); this.logEvent(CARTA.EventType.CLOSE_PV_PREVIEW, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.CLOSE_PV_PREVIEW, CARTA.ClosePvPreview.encode(message).finish())) { return true; } - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } async requestFitting(message: CARTA.IFittingRequest): Promise { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error("Not connected"); + throw new Error('Not connected'); } else { const requestId = this.eventCounter; this.logEvent(CARTA.EventType.FITTING_REQUEST, requestId, message, false); @@ -875,25 +1279,25 @@ export class MessageController { this.deferredMap.set(requestId, deferredResponse); return await deferredResponse.promise; } else { - throw new Error("Could not send event"); + throw new Error('Could not send event'); } } } cancelRequestingFitting(fileId: number) { if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error("Not connected")); + return throwError(new Error('Not connected')); } else { - const message = CARTA.StopFitting.create({fileId}); + const message = CARTA.StopFitting.create({ fileId }); this.logEvent(CARTA.EventType.STOP_FITTING, this.eventCounter, message, false); if (this.sendEvent(CARTA.EventType.STOP_FITTING, CARTA.StopFitting.encode(message).finish())) { return true; } - return throwError(new Error("Could not send event")); + return throwError(new Error('Could not send event')); } } - @action("send scripting response") + @action('send scripting response') sendScriptingResponse = (message: CARTA.IScriptingResponse) => { if (this.connectionStatus === ConnectionStatus.ACTIVE) { this.logEvent(CARTA.EventType.SCRIPTING_RESPONSE, this.eventCounter, message, false); @@ -909,12 +1313,12 @@ export class MessageController { } private messageHandler(event: MessageEvent) { - if (event.data === "PONG") { + if (event.data === 'PONG') { this.lastPongTime = performance.now(); this.updateEndToEndPing(); return; } else if (event.data.byteLength < 8) { - console.log("Unknown event format"); + console.log('Unknown event format'); return; } @@ -927,7 +1331,9 @@ export class MessageController { const eventId = eventHeader32[0]; if (eventIcdVersion !== MessageController.IcdVersion) { - console.log(`Server event has ICD version ${eventIcdVersion}, which differs from frontend version ${MessageController.IcdVersion}. Errors may occur`); + console.log( + `Server event has ICD version ${eventIcdVersion}, which differs from frontend version ${MessageController.IcdVersion}. Errors may occur` + ); } try { const decoderEntry = this.decoderMap.get(eventType); @@ -940,7 +1346,7 @@ export class MessageController { console.log(`Unsupported event response ${eventType}`); } } else { - throw Error("no decoder"); + throw Error('no decoder'); } } catch (e) { console.log(e); @@ -1064,7 +1470,7 @@ export class MessageController { this.eventCounter++; return true; } else { - console.log("Error sending event"); + console.log('Error sending event'); this.eventCounter++; return false; } diff --git a/src/performance/MyParsing.ts b/src/performance/MyParsing.ts new file mode 100644 index 0000000..589c1b8 --- /dev/null +++ b/src/performance/MyParsing.ts @@ -0,0 +1,145 @@ +import * as _ from 'lodash'; +import { CARTA } from 'carta-protobuf'; + +// order matters, since ... and .. both having .. (same for < and <=, > and >=) +export enum ComparisonOperator { + Equal = '==', + NotEqual = '!=', + LessorOrEqual = '<=', + Lesser = '<', + GreaterOrEqual = '>=', + Greater = '>', + RangeClosed = '...', + RangeOpen = '..', +} + +export function parseBoolean(value: string, defaultValue: boolean): boolean { + if (value === 'true') { + return true; + } else if (value === 'false') { + return false; + } else { + return defaultValue; + } +} + +export function parseNumber(val: number, initVal: number): number { + if (isFinite(val)) { + return val; + } else { + return initVal; + } +} + +export function trimFitsComment(val: string): string { + if (!val) { + return ''; + } + + // replace standard Fits header comments + return val.replace(/\s\/\s?.*$/, ''); +} + +export function mapToObject(map: Map) { + const obj: { [k: string]: T } = {}; + map.forEach((value, key) => { + obj[key.toString()] = value; + }); + console.log(obj); + return obj; +} + +export function findDeep(obj: any, pred: (obj: any) => boolean) { + if (pred(obj)) { + return [obj]; + } + return _.flatten( + _.map(obj, (child) => { + return typeof child === 'object' ? findDeep(child, pred) : []; + }) + ); +} + +// parsing filter string for TableComponent filter function +function getNumberFromFilterString(filterString: string): number { + const n = filterString.replace(/[^0-9.+-.]+/g, ''); + if (n !== '') { + return Number(n); + } + return undefined; +} + +export function getComparisonOperatorAndValue(filterString: string): { + operator: CARTA.ComparisonOperator; + values: number[]; +} { + const filter = filterString.replace(/\s/g, ''); + let result = { operator: -1, values: [] }; + // order matters, since ... and .. both include .. (same for < and <=, > and >=) + for (const key of Object.keys(ComparisonOperator)) { + const operator = ComparisonOperator[key]; + const found = filter.includes(operator); + if (found) { + if (operator === ComparisonOperator.Equal) { + const equalTo = getNumberFromFilterString(filter); + if (equalTo !== undefined) { + result.operator = CARTA.ComparisonOperator.Equal; + result.values.push(equalTo); + } + return result; + } else if (operator === ComparisonOperator.NotEqual) { + const notEqualTo = getNumberFromFilterString(filter); + if (notEqualTo !== undefined) { + result.operator = CARTA.ComparisonOperator.NotEqual; + result.values.push(notEqualTo); + } + return result; + } else if (operator === ComparisonOperator.Lesser) { + const lessThan = getNumberFromFilterString(filter); + if (lessThan !== undefined) { + result.operator = CARTA.ComparisonOperator.Lesser; + result.values.push(lessThan); + } + return result; + } else if (operator === ComparisonOperator.LessorOrEqual) { + const lessThanOrEqualTo = getNumberFromFilterString(filter); + if (lessThanOrEqualTo !== undefined) { + result.values.push(lessThanOrEqualTo); + result.operator = CARTA.ComparisonOperator.LessorOrEqual; + } + return result; + } else if (operator === ComparisonOperator.Greater) { + const greaterThan = getNumberFromFilterString(filter); + if (greaterThan !== undefined) { + result.operator = CARTA.ComparisonOperator.Greater; + result.values.push(greaterThan); + } + return result; + } else if (operator === ComparisonOperator.GreaterOrEqual) { + const greaterThanOrEqualTo = getNumberFromFilterString(filter); + if (greaterThanOrEqualTo !== undefined) { + result.values.push(greaterThanOrEqualTo); + result.operator = CARTA.ComparisonOperator.GreaterOrEqual; + } + return result; + } else if (operator === ComparisonOperator.RangeOpen) { + const fromTo = filter.split(ComparisonOperator.RangeOpen, 2); + if (fromTo[0] !== '' && fromTo[1] !== '') { + result.values.push(Number(fromTo[0])); + result.values.push(Number(fromTo[1])); + result.operator = CARTA.ComparisonOperator.RangeOpen; + } + return result; + } else if (operator === ComparisonOperator.RangeClosed) { + const betweenAnd = filter.split(ComparisonOperator.RangeClosed, 2); + if (betweenAnd[0] !== '' && betweenAnd[1] !== '') { + result.values.push(Number(betweenAnd[0])); + result.values.push(Number(betweenAnd[1])); + result.operator = CARTA.ComparisonOperator.RangeClosed; + } + return result; + } + } + } + return result; +} diff --git a/src/performance/config.json b/src/performance/config.json index f1918b5..0c949a9 100644 --- a/src/performance/config.json +++ b/src/performance/config.json @@ -1,5 +1,6 @@ { "serverURL0": "ws://127.0.0.1:3002", + "icdVersion": 30, "path": { "root": ".", "base": "$BASE", @@ -9,11 +10,11 @@ "region": "set_QA/regionTest", "performance": "set_QA_performance", "catalogArtificial": "set_QA/carta_artificial_catalog", - "catalogLarge": "set_cosmos", + "catalogLarge": "set_QA/set_cosmos", "save": "set_QA/tmp", "save_rhel9": "set_QA/tmp/rhel9", "concat_stokes": "set_StokesCube", - "large_files": "set_lotsFiles2", + "large_files": "set_QA/set_lotsFiles2", "compressed_fits": "set_compressed_fits" }, "performance": { @@ -27,7 +28,7 @@ "timeout": { "connection": 1100, "listFile": 1200, - "openFile": 8000, + "openFile": 6000, "readFile": 6000, "saveFile": 3000, "readLargeImage": 90000, @@ -39,7 +40,7 @@ "cancel": 5000, "concurrent": 7000, "messageEvent": 500, - "mouseEvent": 1000, + "mouseEvent": 3000, "cursor": 500, "region": 5000, "import": 500, @@ -60,7 +61,7 @@ "pvRequest": 60000, "imageFitting": 100000, "vectorOverlay": 6000, - "firstHistogramCancellation": 30000, + "firstHistogramCancellation": 100000, "dragManyNumberBins": 100000 }, "repeat": { diff --git a/src/performance/myClient.ts b/src/performance/myClient.ts index fa973ca..9dbb4bc 100644 --- a/src/performance/myClient.ts +++ b/src/performance/myClient.ts @@ -1,26 +1,26 @@ -import { CARTA } from "carta-protobuf"; -import {MessageController, ConnectionStatus} from "./MessageController"; +import { CARTA } from 'carta-protobuf'; +import { MessageController, ConnectionStatus } from './MessageController'; import { take } from 'rxjs/operators'; function checkConnection() { const msgController = MessageController.Instance; - test("check connection", () => { - expect(msgController.connectionStatus).toBe(ConnectionStatus.ACTIVE) - }) + test('check connection', () => { + expect(msgController.connectionStatus).toBe(ConnectionStatus.ACTIVE); + }); } function Stream(cartaType: any, InputNum?: number) { - return new Promise((resolve,reject) => { + return new Promise((resolve, reject) => { const msgController = MessageController.Instance; - let _count = 0; - switch(cartaType){ + let count = 0; + switch (cartaType) { case CARTA.RegionHistogramData: let RegionHistogramData: CARTA.RegionHistogramData[] = []; let resRegionHistogramData = msgController.histogramStream.pipe(take(InputNum)); - resRegionHistogramData.subscribe(data => { + resRegionHistogramData.subscribe((data) => { RegionHistogramData.push(data); - _count++; - if (_count === InputNum){ + count++; + if (count === InputNum) { resolve(RegionHistogramData); } }); @@ -28,10 +28,10 @@ function Stream(cartaType: any, InputNum?: number) { case CARTA.SpatialProfileData: let SpatialProfileData: CARTA.SpatialProfileData[] = []; let resSpatialProfileData = msgController.spatialProfileStream.pipe(take(InputNum)); - resSpatialProfileData.subscribe(data => { + resSpatialProfileData.subscribe((data) => { SpatialProfileData.push(data); - _count++; - if (_count === InputNum){ + count++; + if (count === InputNum) { resolve(SpatialProfileData); } }); @@ -39,26 +39,37 @@ function Stream(cartaType: any, InputNum?: number) { case CARTA.RasterTileData: let ack: any[] = []; let ex1 = msgController.rasterSyncStream.pipe(take(2)); - ex1.subscribe(data => { - _count++; + ex1.subscribe((data) => { + count++; ack.push(data); - if (data.endSync && _count === InputNum){ + if (data.endSync && count === InputNum) { resolve(ack); } - }) + }); let ex2 = msgController.rasterTileStream.pipe(take(InputNum - 2)); - ex2.subscribe(data => { - _count++; - ack.push(data) - }) + ex2.subscribe((data) => { + count++; + ack.push(data); + }); + break; + case CARTA.ListProgress: + let ListProgressData: any[] = []; + let resListProgressData = msgController.listProgressStream.pipe(take(InputNum)); + resListProgressData.subscribe((data) => { + ListProgressData.push(data); + count++; + if (count === InputNum) { + resolve(ListProgressData); + } + }); break; case CARTA.MomentProgress: let MomentProgressData: any[] = []; let resMomentProgressData = msgController.momentProgressStream.pipe(take(InputNum)); - resMomentProgressData.subscribe(data => { + resMomentProgressData.subscribe((data) => { MomentProgressData.push(data); - _count++; - if (_count === InputNum) { + count++; + if (count === InputNum) { resolve(MomentProgressData); } }); @@ -66,83 +77,104 @@ function Stream(cartaType: any, InputNum?: number) { case CARTA.ErrorData: let ErrorData: CARTA.IErrorData[] = []; let resErrorData = msgController.errorStream.pipe(take(InputNum)); - resErrorData.subscribe(data => { + resErrorData.subscribe((data) => { ErrorData.push(data); - _count++; - if (_count === InputNum) { + count++; + if (count === InputNum) { resolve(ErrorData); } }); break; case CARTA.ContourImageData: - let ContourImageData : CARTA.ContourImageData[] = []; + let ContourImageData: CARTA.ContourImageData[] = []; let resContourImageData = msgController.contourStream.pipe(take(InputNum)); - resContourImageData.subscribe(data => { + resContourImageData.subscribe((data) => { ContourImageData.push(data); - _count++; - if (_count === InputNum) { + count++; + if (count === InputNum) { resolve(ContourImageData); } - }) + }); break; case CARTA.ErrorData: - let ErrorStreamData : CARTA.ErrorData[] = []; + let ErrorStreamData: CARTA.ErrorData[] = []; let resErrorStreamData = msgController.errorStream.pipe(take(InputNum)); - resErrorStreamData.subscribe(data => { + resErrorStreamData.subscribe((data) => { ErrorStreamData.push(data); - _count++; - if (_count === InputNum) { + count++; + if (count === InputNum) { resolve(ErrorStreamData); } - }) + }); break; case CARTA.RegionStatsData: - let RegionStatsData : CARTA.RegionStatsData[] = []; + let RegionStatsData: CARTA.RegionStatsData[] = []; let resRegionStatsData = msgController.statsStream.pipe(take(InputNum)); - resRegionStatsData.subscribe(data => { + resRegionStatsData.subscribe((data) => { RegionStatsData.push(data); - _count++; - if (_count === InputNum) { + count++; + if (count === InputNum) { resolve(RegionStatsData); } - }) + }); break; case CARTA.SpectralProfileData: - let SpectralProfileData : any[] = []; + let SpectralProfileData: any[] = []; let resSpectralProfileData = msgController.spectralProfileStream.subscribe({ next: (data) => { SpectralProfileData.push(data); if (data.progress === 1) { - resolve(SpectralProfileData) + resolve(SpectralProfileData); } - } - }) + }, + }); break; case CARTA.CatalogFilterResponse: - let catalogStream : any [] = []; - let resCatalogStream = msgController.catalogStream.pipe(take(InputNum)); - resCatalogStream.subscribe(data => { - catalogStream.push(data); - _count++; - if (_count === InputNum) { - resolve(catalogStream); - } - }) + let catalogStream: any[] = []; + let resCatalogStream = msgController.catalogStream.subscribe({ + next: (data) => { + catalogStream.push(data); + if (data.progress === 1) { + resolve(catalogStream); + } + }, + }); break; case CARTA.PvPreviewData: - let pvPreviewStream : any [] = []; + let pvPreviewStream: any[] = []; let resPvPreviewStream = msgController.pvPreviewStream.pipe(take(InputNum)); - resPvPreviewStream.subscribe(data => { + resPvPreviewStream.subscribe((data) => { pvPreviewStream.push(data); - _count++; - if (_count === InputNum) { + count++; + if (count === InputNum) { resolve(pvPreviewStream); } - }) - break; + }); + break; } - }) + }); } +function ChannelMapStream(rasterTileDataLen: number, channels: number) { + return new Promise((resolve, reject) => { + const msgController = MessageController.Instance; + const rasterTileMsgLen = (rasterTileDataLen + 2) * channels; // # of RasterTileData + 2 RasterTileSync per channel + let count = 0; + let rasterTileMsgs: any[] = []; + let rasterTileSyncStream = msgController.rasterSyncStream.pipe(take(2 * channels)); + rasterTileSyncStream.subscribe((data) => { + count++; + rasterTileMsgs.push(data); + if (data.endSync && count === rasterTileMsgLen) { + resolve(rasterTileMsgs); + } + }); + let rasterTileDataStream = msgController.rasterTileStream.pipe(take(rasterTileDataLen * channels)); + rasterTileDataStream.subscribe((data) => { + count++; + rasterTileMsgs.push(data); + }); + }); +} -export { checkConnection , Stream }; +export { checkConnection, Stream, ChannelMapStream }; From 4eba7417c0b2eb7eaaddb2ecd4cbc89b9b6c6e59 Mon Sep 17 00:00:00 2001 From: Cheng-Chin Chiang Date: Wed, 12 Nov 2025 09:53:19 +0800 Subject: [PATCH 3/7] Rename myClient to MyClient --- src/performance/{myClient.ts => MyClient.ts} | 0 src/performance/PERF_CONTOUR_DATA_Mode0.test.ts | 2 +- src/performance/PERF_CONTOUR_DATA_Mode1.test.ts | 2 +- src/performance/PERF_CONTOUR_DATA_Mode2.test.ts | 2 +- src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts | 2 +- src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts | 2 +- src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts | 2 +- src/performance/PERF_LOAD_IMAGE_CASA.test.ts | 2 +- src/performance/PERF_LOAD_IMAGE_FITS.test.ts | 2 +- src/performance/PERF_LOAD_IMAGE_HDF5.test.ts | 2 +- src/performance/PERF_MOMENTS_CASA.test.ts | 2 +- src/performance/PERF_MOMENTS_FITS.test.ts | 2 +- src/performance/PERF_MOMENTS_HDF5.test.ts | 2 +- src/performance/PERF_PV_CASA.test.ts | 2 +- src/performance/PERF_PV_FITS.test.ts | 2 +- src/performance/PERF_PV_HDF5.test.ts | 2 +- src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts | 2 +- src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts | 2 +- src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts | 2 +- src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts | 2 +- src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts | 2 +- src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts | 2 +- 22 files changed, 21 insertions(+), 21 deletions(-) rename src/performance/{myClient.ts => MyClient.ts} (100%) diff --git a/src/performance/myClient.ts b/src/performance/MyClient.ts similarity index 100% rename from src/performance/myClient.ts rename to src/performance/MyClient.ts diff --git a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts index 91f1b24..f4a8099 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts index c047991..9c66b4c 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts index 6de71e8..f5fdfee 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts index 9f8a002..9c0d0f0 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts index 88d45c6..c2b59e3 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts index 9c3c0d2..3e99c81 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts index 54d8923..e7406d7 100644 --- a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts index ecb428a..6bd583c 100644 --- a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts index 67fda23..c450902 100644 --- a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_MOMENTS_CASA.test.ts b/src/performance/PERF_MOMENTS_CASA.test.ts index 28d9558..2470991 100644 --- a/src/performance/PERF_MOMENTS_CASA.test.ts +++ b/src/performance/PERF_MOMENTS_CASA.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_MOMENTS_FITS.test.ts b/src/performance/PERF_MOMENTS_FITS.test.ts index a872fa8..9e92c14 100644 --- a/src/performance/PERF_MOMENTS_FITS.test.ts +++ b/src/performance/PERF_MOMENTS_FITS.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_MOMENTS_HDF5.test.ts b/src/performance/PERF_MOMENTS_HDF5.test.ts index 181dc68..d197c00 100644 --- a/src/performance/PERF_MOMENTS_HDF5.test.ts +++ b/src/performance/PERF_MOMENTS_HDF5.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_PV_CASA.test.ts b/src/performance/PERF_PV_CASA.test.ts index 2729dd0..7575534 100644 --- a/src/performance/PERF_PV_CASA.test.ts +++ b/src/performance/PERF_PV_CASA.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_PV_FITS.test.ts b/src/performance/PERF_PV_FITS.test.ts index 6303d69..8f6660f 100644 --- a/src/performance/PERF_PV_FITS.test.ts +++ b/src/performance/PERF_PV_FITS.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_PV_HDF5.test.ts b/src/performance/PERF_PV_HDF5.test.ts index 1586128..3032683 100644 --- a/src/performance/PERF_PV_HDF5.test.ts +++ b/src/performance/PERF_PV_HDF5.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts index 0b04202..0d176e1 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts index 2bd53b7..d19a8ac 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts index 1caba0f..3e6c6c8 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts index e599c72..7848107 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts index dd508a9..620c9a7 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts index cc510b5..41e2c01 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts @@ -1,5 +1,5 @@ import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; +import { checkConnection, Stream} from './MyClient'; import { MessageController } from "./MessageController"; import config from "./config.json"; From 945a08e4101089f9c1b8634ca34e287056a55c66 Mon Sep 17 00:00:00 2001 From: Cheng-Chin Chiang Date: Wed, 12 Nov 2025 10:53:37 +0800 Subject: [PATCH 4/7] Replace the animation performance tests with new ones --- .../PERF_ANIMATION_PLAYBACK_CASA.test.ts | 230 --------- .../PERF_ANIMATION_PLAYBACK_FITS.test.ts | 230 --------- .../PERF_ANIMATION_PLAYBACK_HDF5.test.ts | 230 --------- .../PERF_ANIMATOR_CONTOUR_CASA.test.ts | 475 ++++++++++++++++++ .../PERF_ANIMATOR_CONTOUR_FITS.test.ts | 475 ++++++++++++++++++ .../PERF_ANIMATOR_CONTOUR_HDF5.test.ts | 475 ++++++++++++++++++ 6 files changed, 1425 insertions(+), 690 deletions(-) delete mode 100644 src/performance/PERF_ANIMATION_PLAYBACK_CASA.test.ts delete mode 100644 src/performance/PERF_ANIMATION_PLAYBACK_FITS.test.ts delete mode 100644 src/performance/PERF_ANIMATION_PLAYBACK_HDF5.test.ts create mode 100644 src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts create mode 100644 src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts create mode 100644 src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts diff --git a/src/performance/PERF_ANIMATION_PLAYBACK_CASA.test.ts b/src/performance/PERF_ANIMATION_PLAYBACK_CASA.test.ts deleted file mode 100644 index c8c1797..0000000 --- a/src/performance/PERF_ANIMATION_PLAYBACK_CASA.test.ts +++ /dev/null @@ -1,230 +0,0 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; -import { take } from 'rxjs/operators'; -import * as Long from "long"; - -let testServerUrl: string = config.serverURL0; -let testSubdirectory: string = config.path.performance; -let connectTimeout: number = config.timeout.connection; -let openFileTimeout: number = config.performance.openFile; -let readFileTimeout: number = config.performance.readFile; - -interface AssertItem { - fileOpen: CARTA.IOpenFile[]; - initTilesReq: CARTA.IAddRequiredTiles; - initSetCursor: CARTA.ISetCursor; - initSpatialRequirements: CARTA.ISetSpatialRequirements; - addTilesReq: CARTA.IAddRequiredTiles[]; - setCursor: CARTA.ISetCursor; - setSpatialReq: CARTA.ISetSpatialRequirements; - startAnimation: CARTA.IStartAnimation[]; - stopAnimation: CARTA.IStopAnimation[]; - animationFlowControl: CARTA.IAnimationFlowControl[]; - setImageChannel: CARTA.ISetImageChannels[]; - playAnimatorTimeout: number[]; -}; - -let assertItem: AssertItem = { - fileOpen: [ - { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.image", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, - ], - initTilesReq: { - fileId: 0, - compressionQuality: 11, - compressionType: CARTA.CompressionType.ZFP, - tiles: [0], - }, - initSetCursor: { - fileId: 0, - point: { x: 1, y: 1 }, - }, - initSpatialRequirements: - { - fileId: 0, - regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], - }, - addTilesReq: [ - { - fileId: 0, - compressionQuality: 9, - compressionType: CARTA.CompressionType.ZFP, - tiles: [0], - }, - ], - setCursor: { - fileId: 0, - point: { x: 1, y: 1 }, - }, - setSpatialReq: { - fileId: 0, - regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}] - }, - startAnimation: - [ - { - fileId: 0, - startFrame: { channel: 0, stokes: 0 }, - firstFrame: { channel: 0, stokes: 0 }, - lastFrame: { channel: 999, stokes: 0 }, - deltaFrame: { channel: 1, stokes: 0 }, - requiredTiles: { - fileId: 0, - tiles: [0], - compressionType: CARTA.CompressionType.ZFP, - compressionQuality: 9, - }, - }, - ], - stopAnimation: - [ - { - fileId: 0, - endFrame: { channel: 46, stokes: 0 }, - }, - ], - animationFlowControl: - [ - { - fileId: 0, - animationId: 1, - }, - ], - setImageChannel: - [ - { - fileId: 0, - channel: 46, - stokes: 0, - requiredTiles: { - fileId: 0, - tiles: [0], - compressionType: CARTA.CompressionType.ZFP, - compressionQuality: 11, - }, - }, - ], - playAnimatorTimeout: [200000], -}; - -let basepath: string; -describe("PERF_ANIMATION_PLAYBACK",()=>{ - const msgController = MessageController.Instance; - describe(`Register a session`, () => { - beforeAll(async ()=> { - await msgController.connect(testServerUrl); - }, connectTimeout); - - checkConnection(); - - test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); - basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; - }); - - describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - describe(`Play some channels forwardly`, () => { - test(`(Step 2)"${assertItem.fileOpen[0].file}" Image should return within ${assertItem.playAnimatorTimeout[0]}:`, async () => { - let sequence: number[] = []; - let StartAnimationResponse: CARTA.IStartAnimationAck; - let RegionHistogramData: CARTA.RegionHistogramData[] = []; - let SpatialProfileData: CARTA.SpatialProfileData[] = []; - - StartAnimationResponse = await msgController.startAnimation({ - ...assertItem.startAnimation[0], - looping: true, - reverse: false, - frameRate: 15, - }); - expect(StartAnimationResponse.success).toEqual(true); - msgController.addRequiredTiles(assertItem.addTilesReq[0]); - - for (let i=0; i < assertItem.stopAnimation[0].endFrame.channel-1; i++){ - msgController.histogramStream.pipe(take(1)).subscribe({ - next: (data) => { - RegionHistogramData.push(data); - } - }) - - msgController.spatialProfileStream.pipe(take(1)).subscribe({ - next: (data) => { - SpatialProfileData.push(data) - } - }) - - let RasterTileData = await Stream(CARTA.RasterTileData,assertItem.startAnimation[0].requiredTiles.tiles.length + 2); - sequence.push(RasterTileData[0].channel); - - msgController.sendAnimationFlowControl({ - ...assertItem.animationFlowControl[0], - receivedFrame: { - channel: RasterTileData[0].channel, - stokes: 0 - }, - timestamp: Long.fromNumber(Date.now()), - }); - } - msgController.stopAnimation(assertItem.stopAnimation[0]); - msgController.setChannels(assertItem.setImageChannel[0]); - let lastRegionHistogramDataPromise = new Promise((resolve) => { - msgController.histogramStream.pipe(take(1)).subscribe({ - next: (data) => { - resolve(data) - } - }); - }); - let lastRegionHistogramData = await lastRegionHistogramDataPromise; - - let lastSpatialProfileDataPromise = new Promise((resolve) => { - msgController.spatialProfileStream.pipe(take(1)).subscribe({ - next: (data) => { - resolve(data) - } - }); - }); - let lastSpatialProfileData = await lastSpatialProfileDataPromise; - - let lastRasterTileDataChannel46 = await Stream(CARTA.RasterTileData,3); - sequence.push(lastRasterTileDataChannel46[1].channel); - console.log(sequence); - expect(sequence[sequence.length - 1]).toEqual(assertItem.stopAnimation[0].endFrame.channel); - - }, assertItem.playAnimatorTimeout[0]); - }); - - }); - - afterAll(() => msgController.closeConnection()); - }); -}); \ No newline at end of file diff --git a/src/performance/PERF_ANIMATION_PLAYBACK_FITS.test.ts b/src/performance/PERF_ANIMATION_PLAYBACK_FITS.test.ts deleted file mode 100644 index dc636fc..0000000 --- a/src/performance/PERF_ANIMATION_PLAYBACK_FITS.test.ts +++ /dev/null @@ -1,230 +0,0 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; -import { take } from 'rxjs/operators'; -import * as Long from "long"; - -let testServerUrl: string = config.serverURL0; -let testSubdirectory: string = config.path.performance; -let connectTimeout: number = config.timeout.connection; -let openFileTimeout: number = config.performance.openFile; -let readFileTimeout: number = config.performance.readFile; - -interface AssertItem { - fileOpen: CARTA.IOpenFile[]; - initTilesReq: CARTA.IAddRequiredTiles; - initSetCursor: CARTA.ISetCursor; - initSpatialRequirements: CARTA.ISetSpatialRequirements; - addTilesReq: CARTA.IAddRequiredTiles[]; - setCursor: CARTA.ISetCursor; - setSpatialReq: CARTA.ISetSpatialRequirements; - startAnimation: CARTA.IStartAnimation[]; - stopAnimation: CARTA.IStopAnimation[]; - animationFlowControl: CARTA.IAnimationFlowControl[]; - setImageChannel: CARTA.ISetImageChannels[]; - playAnimatorTimeout: number[]; -}; - -let assertItem: AssertItem = { - fileOpen: [ - { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.fits", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, - ], - initTilesReq: { - fileId: 0, - compressionQuality: 11, - compressionType: CARTA.CompressionType.ZFP, - tiles: [0], - }, - initSetCursor: { - fileId: 0, - point: { x: 1, y: 1 }, - }, - initSpatialRequirements: - { - fileId: 0, - regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], - }, - addTilesReq: [ - { - fileId: 0, - compressionQuality: 9, - compressionType: CARTA.CompressionType.ZFP, - tiles: [0], - }, - ], - setCursor: { - fileId: 0, - point: { x: 1, y: 1 }, - }, - setSpatialReq: { - fileId: 0, - regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}] - }, - startAnimation: - [ - { - fileId: 0, - startFrame: { channel: 0, stokes: 0 }, - firstFrame: { channel: 0, stokes: 0 }, - lastFrame: { channel: 999, stokes: 0 }, - deltaFrame: { channel: 1, stokes: 0 }, - requiredTiles: { - fileId: 0, - tiles: [0], - compressionType: CARTA.CompressionType.ZFP, - compressionQuality: 9, - }, - }, - ], - stopAnimation: - [ - { - fileId: 0, - endFrame: { channel: 46, stokes: 0 }, - }, - ], - animationFlowControl: - [ - { - fileId: 0, - animationId: 1, - }, - ], - setImageChannel: - [ - { - fileId: 0, - channel: 46, - stokes: 0, - requiredTiles: { - fileId: 0, - tiles: [0], - compressionType: CARTA.CompressionType.ZFP, - compressionQuality: 11, - }, - }, - ], - playAnimatorTimeout: [200000], -}; - -let basepath: string; -describe("PERF_ANIMATION_PLAYBACK",()=>{ - const msgController = MessageController.Instance; - describe(`Register a session`, () => { - beforeAll(async ()=> { - await msgController.connect(testServerUrl); - }, connectTimeout); - - checkConnection(); - - test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); - basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; - }); - - describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - describe(`Play some channels forwardly`, () => { - test(`(Step 2)"${assertItem.fileOpen[0].file}" Image should return within ${assertItem.playAnimatorTimeout[0]}:`, async () => { - let sequence: number[] = []; - let StartAnimationResponse: CARTA.IStartAnimationAck; - let RegionHistogramData: CARTA.RegionHistogramData[] = []; - let SpatialProfileData: CARTA.SpatialProfileData[] = []; - - StartAnimationResponse = await msgController.startAnimation({ - ...assertItem.startAnimation[0], - looping: true, - reverse: false, - frameRate: 15, - }); - expect(StartAnimationResponse.success).toEqual(true); - msgController.addRequiredTiles(assertItem.addTilesReq[0]); - - for (let i=0; i < assertItem.stopAnimation[0].endFrame.channel-1; i++){ - msgController.histogramStream.pipe(take(1)).subscribe({ - next: (data) => { - RegionHistogramData.push(data); - } - }) - - msgController.spatialProfileStream.pipe(take(1)).subscribe({ - next: (data) => { - SpatialProfileData.push(data) - } - }) - - let RasterTileData = await Stream(CARTA.RasterTileData,assertItem.startAnimation[0].requiredTiles.tiles.length + 2); - sequence.push(RasterTileData[0].channel); - - msgController.sendAnimationFlowControl({ - ...assertItem.animationFlowControl[0], - receivedFrame: { - channel: RasterTileData[0].channel, - stokes: 0 - }, - timestamp: Long.fromNumber(Date.now()), - }); - } - msgController.stopAnimation(assertItem.stopAnimation[0]); - msgController.setChannels(assertItem.setImageChannel[0]); - let lastRegionHistogramDataPromise = new Promise((resolve) => { - msgController.histogramStream.pipe(take(1)).subscribe({ - next: (data) => { - resolve(data) - } - }); - }); - let lastRegionHistogramData = await lastRegionHistogramDataPromise; - - let lastSpatialProfileDataPromise = new Promise((resolve) => { - msgController.spatialProfileStream.pipe(take(1)).subscribe({ - next: (data) => { - resolve(data) - } - }); - }); - let lastSpatialProfileData = await lastSpatialProfileDataPromise; - - let lastRasterTileDataChannel46 = await Stream(CARTA.RasterTileData,3); - sequence.push(lastRasterTileDataChannel46[1].channel); - console.log(sequence); - expect(sequence[sequence.length - 1]).toEqual(assertItem.stopAnimation[0].endFrame.channel); - - }, assertItem.playAnimatorTimeout[0]); - }); - - }); - - afterAll(() => msgController.closeConnection()); - }); -}); \ No newline at end of file diff --git a/src/performance/PERF_ANIMATION_PLAYBACK_HDF5.test.ts b/src/performance/PERF_ANIMATION_PLAYBACK_HDF5.test.ts deleted file mode 100644 index a64e17c..0000000 --- a/src/performance/PERF_ANIMATION_PLAYBACK_HDF5.test.ts +++ /dev/null @@ -1,230 +0,0 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './myClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; -import { take } from 'rxjs/operators'; -import * as Long from "long"; - -let testServerUrl: string = config.serverURL0; -let testSubdirectory: string = config.path.performance; -let connectTimeout: number = config.timeout.connection; -let openFileTimeout: number = config.performance.openFile; -let readFileTimeout: number = config.performance.readFile; - -interface AssertItem { - fileOpen: CARTA.IOpenFile[]; - initTilesReq: CARTA.IAddRequiredTiles; - initSetCursor: CARTA.ISetCursor; - initSpatialRequirements: CARTA.ISetSpatialRequirements; - addTilesReq: CARTA.IAddRequiredTiles[]; - setCursor: CARTA.ISetCursor; - setSpatialReq: CARTA.ISetSpatialRequirements; - startAnimation: CARTA.IStartAnimation[]; - stopAnimation: CARTA.IStopAnimation[]; - animationFlowControl: CARTA.IAnimationFlowControl[]; - setImageChannel: CARTA.ISetImageChannels[]; - playAnimatorTimeout: number[]; -}; - -let assertItem: AssertItem = { - fileOpen: [ - { - directory: testSubdirectory + "/cube_B", - file: "cube_B_09600_z00100.hdf5", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, - ], - initTilesReq: { - fileId: 0, - compressionQuality: 11, - compressionType: CARTA.CompressionType.ZFP, - tiles: [0], - }, - initSetCursor: { - fileId: 0, - point: { x: 1, y: 1 }, - }, - initSpatialRequirements: - { - fileId: 0, - regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], - }, - addTilesReq: [ - { - fileId: 0, - compressionQuality: 9, - compressionType: CARTA.CompressionType.ZFP, - tiles: [0], - }, - ], - setCursor: { - fileId: 0, - point: { x: 1, y: 1 }, - }, - setSpatialReq: { - fileId: 0, - regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}] - }, - startAnimation: - [ - { - fileId: 0, - startFrame: { channel: 0, stokes: 0 }, - firstFrame: { channel: 0, stokes: 0 }, - lastFrame: { channel: 999, stokes: 0 }, - deltaFrame: { channel: 1, stokes: 0 }, - requiredTiles: { - fileId: 0, - tiles: [0], - compressionType: CARTA.CompressionType.ZFP, - compressionQuality: 9, - }, - }, - ], - stopAnimation: - [ - { - fileId: 0, - endFrame: { channel: 46, stokes: 0 }, - }, - ], - animationFlowControl: - [ - { - fileId: 0, - animationId: 1, - }, - ], - setImageChannel: - [ - { - fileId: 0, - channel: 46, - stokes: 0, - requiredTiles: { - fileId: 0, - tiles: [0], - compressionType: CARTA.CompressionType.ZFP, - compressionQuality: 11, - }, - }, - ], - playAnimatorTimeout: [600000], -}; - -let basepath: string; -describe("PERF_ANIMATION_PLAYBACK",()=>{ - const msgController = MessageController.Instance; - describe(`Register a session`, () => { - beforeAll(async ()=> { - await msgController.connect(testServerUrl); - }, connectTimeout); - - checkConnection(); - - test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); - basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; - }); - - describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - describe(`Play some channels forwardly`, () => { - test(`(Step 2)"${assertItem.fileOpen[0].file}" Image should return within ${assertItem.playAnimatorTimeout[0]}:`, async () => { - let sequence: number[] = []; - let StartAnimationResponse: CARTA.IStartAnimationAck; - let RegionHistogramData: CARTA.RegionHistogramData[] = []; - let SpatialProfileData: CARTA.SpatialProfileData[] = []; - - StartAnimationResponse = await msgController.startAnimation({ - ...assertItem.startAnimation[0], - looping: true, - reverse: false, - frameRate: 15, - }); - expect(StartAnimationResponse.success).toEqual(true); - msgController.addRequiredTiles(assertItem.addTilesReq[0]); - - for (let i=0; i < assertItem.stopAnimation[0].endFrame.channel-1; i++){ - msgController.histogramStream.pipe(take(1)).subscribe({ - next: (data) => { - RegionHistogramData.push(data); - } - }) - - msgController.spatialProfileStream.pipe(take(1)).subscribe({ - next: (data) => { - SpatialProfileData.push(data) - } - }) - - let RasterTileData = await Stream(CARTA.RasterTileData,assertItem.startAnimation[0].requiredTiles.tiles.length + 2); - sequence.push(RasterTileData[0].channel); - - msgController.sendAnimationFlowControl({ - ...assertItem.animationFlowControl[0], - receivedFrame: { - channel: RasterTileData[0].channel, - stokes: 0 - }, - timestamp: Long.fromNumber(Date.now()), - }); - } - msgController.stopAnimation(assertItem.stopAnimation[0]); - msgController.setChannels(assertItem.setImageChannel[0]); - let lastRegionHistogramDataPromise = new Promise((resolve) => { - msgController.histogramStream.pipe(take(1)).subscribe({ - next: (data) => { - resolve(data) - } - }); - }); - let lastRegionHistogramData = await lastRegionHistogramDataPromise; - - let lastSpatialProfileDataPromise = new Promise((resolve) => { - msgController.spatialProfileStream.pipe(take(1)).subscribe({ - next: (data) => { - resolve(data) - } - }); - }); - let lastSpatialProfileData = await lastSpatialProfileDataPromise; - - let lastRasterTileDataChannel46 = await Stream(CARTA.RasterTileData,3); - sequence.push(lastRasterTileDataChannel46[1].channel); - console.log(sequence); - expect(sequence[sequence.length - 1]).toEqual(assertItem.stopAnimation[0].endFrame.channel); - - }, assertItem.playAnimatorTimeout[0]); - }); - - }); - - afterAll(() => msgController.closeConnection()); - }); -}); \ No newline at end of file diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts new file mode 100644 index 0000000..2b27fc2 --- /dev/null +++ b/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts @@ -0,0 +1,475 @@ +import { CARTA } from 'carta-protobuf'; +import * as Long from 'long'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; +import { take } from 'rxjs/operators'; + +let connectTimeout = config.timeout.connection; +let testServerUrl: string = config.serverURL0; +let testSubdirectory: string = config.path.performance; +let openFileTimeout: number = config.timeout.openFile; +let readFileTimeout: number = config.timeout.readFile; +let playAnimatorTimeout = config.timeout.playAnimator; + +interface AssertItem { + registerViewer: CARTA.IRegisterViewer; + filelist: CARTA.IFileListRequest; + openFile: CARTA.IOpenFile; + addTilesReq: CARTA.IAddRequiredTiles; + setContour: CARTA.ISetContourParameters; + startAnimation: CARTA.IStartAnimation[]; + stopAnimation: CARTA.IStopAnimation[]; + animationFlowControl: CARTA.IAnimationFlowControl[]; + setImageChannel: CARTA.ISetImageChannels[]; +} + +let assertItem: AssertItem = { + registerViewer: { + sessionId: 0, + clientFeatureFlags: 5, + }, + filelist: { directory: testSubdirectory }, + openFile: { + directory: testSubdirectory, + file: 'cube_B_06400_z00100.image', + hdu: '', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, + addTilesReq: { + fileId: 0, + compressionQuality: 11, + compressionType: CARTA.CompressionType.ZFP, + tiles: [0], + }, + setContour: { + fileId: 0, + referenceFileId: 0, + imageBounds: { + xMin: 0, + xMax: 640, + yMin: 0, + yMax: 800, + }, + levels: [-0.01, 0.01], + smoothingMode: CARTA.SmoothingMode.GaussianBlur, + smoothingFactor: 4, + decimationFactor: 4, + compressionLevel: 8, + contourChunkSize: 100000, + }, + startAnimation: [ + { + fileId: 0, + startFrame: { channel: 1, stokes: 0 }, + firstFrame: { channel: 0, stokes: 0 }, + lastFrame: { channel: 44, stokes: 0 }, + deltaFrame: { channel: 1, stokes: 0 }, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 9, + }, + looping: false, + reverse: false, + frameRate: 5, + }, + { + fileId: 0, + startFrame: { channel: 40, stokes: 0 }, + firstFrame: { channel: 0, stokes: 0 }, + lastFrame: { channel: 44, stokes: 0 }, + deltaFrame: { channel: -1, stokes: 0 }, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 9, + }, + looping: false, + reverse: false, + frameRate: 5, + }, + ], + stopAnimation: [ + { + fileId: 0, + endFrame: { channel: 30, stokes: 0 }, + }, + { + fileId: 0, + endFrame: { channel: 30, stokes: 0 }, + }, + ], + animationFlowControl: [ + { + fileId: 0, + animationId: 1, + }, + { + fileId: 0, + animationId: 2, + }, + ], + setImageChannel: [ + { + fileId: 0, + channel: 0, + stokes: 0, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 11, + }, + }, + { + fileId: 0, + channel: 40, + stokes: 0, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 11, + }, + }, + ], +}; + +describe('ANIMATOR_CONTOUR: Testing animation playback with contour lines', () => { + const msgController = MessageController.Instance; + describe(`Register a session`, () => { + beforeAll(async () => { + await msgController.connect(testServerUrl); + }, connectTimeout); + + checkConnection(); + let basepath: string; + test(`Get basepath`, async () => { + let fileListResponse = await msgController.getFileList('$BASE', 0); + basepath = fileListResponse.directory; + }); + + describe(`Go to "${assertItem.filelist.directory}" folder`, () => { + let OpenFileResponse: CARTA.IOpenFileAck; + test( + `"${assertItem.openFile.file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + assertItem.openFile.directory = basepath + '/' + assertItem.filelist.directory; + OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + expect(RegionHistrogramDataResponse.length).toEqual(1); + }, + openFileTimeout + ); + + test( + `Preparation`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setContourParameters(assertItem.setContour); + let ContourImageDataResponse = await Stream( + CARTA.ContourImageData, + assertItem.setContour.levels.length + ); + }, + readFileTimeout + ); + }); + + describe(`(Case 1):Play some channels forwardly`, () => { + test(`Preparation`, async () => { + msgController.setChannels(assertItem.setImageChannel[0]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.setImageChannel[0].requiredTiles.tiles.length + 2 + ); + }); + + let regionHistogramData: CARTA.RegionHistogramData[] = []; + let RasterTileSequence: number[] = []; + let HistogramSequence: number[] = []; + let ContourSequence: number[] = []; + test( + `Image should return one after one and the last channel is correct:`, + async () => { + let StartAnimationResponse: CARTA.IStartAnimationAck; + StartAnimationResponse = await msgController.startAnimation(assertItem.startAnimation[0]); + expect(StartAnimationResponse.success).toEqual(true); + + for (let i = 0; i < assertItem.stopAnimation[0].endFrame.channel; i++) { + msgController.addRequiredTiles(assertItem.addTilesReq); + let resRegionHistogramData = msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + regionHistogramData.push(data); + HistogramSequence.push(data.channel); + }, + }); + let resContourImageData = msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + ContourSequence.push(data.channel); + }, + }); + + let rasterTileDataResponse = await Stream(CARTA.RasterTileData, 3); + let currentChannel = rasterTileDataResponse[0].channel; + RasterTileSequence.push(currentChannel); + + msgController.sendAnimationFlowControl({ + ...assertItem.animationFlowControl[0], + receivedFrame: { + channel: currentChannel, + stokes: 0, + }, + timestamp: Long.fromNumber(Date.now()), + }); + } + + // Pick up the streaming messages + // Channel 11 & 12: RasterTileData + RasterTileSync(start & end) + RegionHistogramData + let RegionHistogramDataChannel11: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel11.push(data); + }); + let RasterTileDataChannel11 = await Stream(CARTA.RasterTileData, 3); + + let RegionHistogramDataChannel12: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel12.push(data); + }); + let RasterTileDataChannel12 = await Stream(CARTA.RasterTileData, 3); + + // // Send StopAnimator + msgController.stopAnimation(assertItem.stopAnimation[0]); + msgController.setChannels(assertItem.setImageChannel[0]); + + let lastRegionHistogramData: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + lastRegionHistogramData.push(data); + }, + }); + let lastContourImageData: CARTA.ContourImageData[] = []; + msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + lastContourImageData.push(data); + }, + }); + + let lastRasterTileData = await Stream(CARTA.RasterTileData, 3); + }, + playAnimatorTimeout + ); + + test(`Received RasterTileData channels should be in sequence`, async () => { + console.log(`(Step 1) Sequent channel index: ${RasterTileSequence}`); + RasterTileSequence.map((id, index) => { + let channelId = + index + + assertItem.startAnimation[0].startFrame.channel + + assertItem.startAnimation[0].deltaFrame.channel - + 1; + expect(id).toEqual(channelId); + }); + }); + + test(`Received ContourData channels should be in sequence`, async () => { + for (let i = 1; i <= assertItem.stopAnimation[0].endFrame.channel; i++) { + expect(ContourSequence[(i - 1) * 2]).toEqual(i); + expect(ContourSequence[(i - 1) * 2 + 1]).toEqual(i); + } + }); + + test(`Received RegionHistogramData channels should be in sequence`, async () => { + for (let i = 1; i <= assertItem.stopAnimation[0].endFrame.channel; i++) { + expect(HistogramSequence[i - 1]).toEqual(i); + } + }); + }); + afterAll(() => msgController.closeConnection()); + }); +}); + +describe('ANIMATOR_CONTOUR: Testing animation playback with contour lines', () => { + const msgController = MessageController.Instance; + describe(`Register a session`, () => { + beforeAll(async () => { + await msgController.connect(testServerUrl); + }, connectTimeout); + + checkConnection(); + let basepath: string; + test(`Get basepath`, async () => { + let fileListResponse = await msgController.getFileList('$BASE', 0); + basepath = fileListResponse.directory; + }); + + describe(`Go to "${assertItem.filelist.directory}" folder`, () => { + let OpenFileResponse: CARTA.IOpenFileAck; + test( + `"${assertItem.openFile.file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + assertItem.openFile.directory = basepath + '/' + assertItem.filelist.directory; + OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + expect(RegionHistrogramDataResponse.length).toEqual(1); + }, + openFileTimeout + ); + + test( + `Preparation`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setContourParameters(assertItem.setContour); + let ContourImageDataResponse = await Stream( + CARTA.ContourImageData, + assertItem.setContour.levels.length + ); + }, + readFileTimeout + ); + }); + + describe(`(Case 2) Play some channels backwardly`, () => { + test(`Preparation`, async () => { + msgController.setChannels(assertItem.setImageChannel[1]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.setImageChannel[1].requiredTiles.tiles.length + 2 + ); + }); + + let regionHistogramData: CARTA.RegionHistogramData[] = []; + let RasterTileSequence: number[] = []; + let HistogramSequence: number[] = []; + let ContourSequence: number[] = []; + test( + `Image should return one after one and the last channel is correct:`, + async () => { + let StartAnimationResponse: CARTA.IStartAnimationAck; + StartAnimationResponse = await msgController.startAnimation(assertItem.startAnimation[1]); + expect(StartAnimationResponse.success).toEqual(true); + + for ( + let i = assertItem.startAnimation[1].startFrame.channel; + i > assertItem.stopAnimation[1].endFrame.channel - 1; + i-- + ) { + msgController.addRequiredTiles(assertItem.addTilesReq); + let resRegionHistogramData = msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + regionHistogramData.push(data); + HistogramSequence.push(data.channel); + }, + }); + let resContourImageData = msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + ContourSequence.push(data.channel); + }, + }); + + let rasterTileDataResponse = await Stream(CARTA.RasterTileData, 3); + let currentChannel = rasterTileDataResponse[0].channel; + RasterTileSequence.push(currentChannel); + + msgController.sendAnimationFlowControl({ + ...assertItem.animationFlowControl[0], + receivedFrame: { + channel: currentChannel, + stokes: 0, + }, + timestamp: Long.fromNumber(Date.now()), + }); + } + + // Pick up the streaming messages + // Channel 8 & 7: RasterTileData + RasterTileSync(start & end) + RegionHistogramData + let RegionHistogramDataChannel8: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel8.push(data); + }); + let RasterTileDataChannel8 = await Stream(CARTA.RasterTileData, 3); + + let RegionHistogramDataChannel7: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel7.push(data); + }); + let RasterTileDataChannel7 = await Stream(CARTA.RasterTileData, 3); + + // // Send StopAnimator + msgController.stopAnimation(assertItem.stopAnimation[1]); + msgController.setChannels(assertItem.setImageChannel[1]); + + let lastRegionHistogramData: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + lastRegionHistogramData.push(data); + }, + }); + let lastContourImageData: CARTA.ContourImageData[] = []; + msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + lastContourImageData.push(data); + }, + }); + + let lastRasterTileData = await Stream(CARTA.RasterTileData, 3); + }, + playAnimatorTimeout + ); + + test(`Received RasterTileData channels should be in sequence`, async () => { + console.log(`(Step 2) Sequent channel index: ${RasterTileSequence}`); + RasterTileSequence.map((id, index) => { + let channelId = -index + assertItem.startAnimation[1].startFrame.channel - 1; + expect(id).toEqual(channelId); + }); + }); + + test(`Received ContourData channels should be in sequence`, async () => { + let index = 1; + for ( + let i = assertItem.startAnimation[1].startFrame.channel - 1; + i > assertItem.stopAnimation[1].endFrame.channel - 2; + i-- + ) { + expect(ContourSequence[(index - 1) * 2]).toEqual(i); + expect(ContourSequence[(index - 1) * 2 + 1]).toEqual(i); + index++; + } + }); + + test(`Received RegionHistogramData channels should be in sequence`, async () => { + let index = 1; + for ( + let i = assertItem.startAnimation[1].startFrame.channel - 1; + i > assertItem.stopAnimation[1].endFrame.channel - 2; + i-- + ) { + expect(HistogramSequence[index - 1]).toEqual(i); + index++; + } + }); + }); + + afterAll(() => msgController.closeConnection()); + }); +}); diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts new file mode 100644 index 0000000..af022d3 --- /dev/null +++ b/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts @@ -0,0 +1,475 @@ +import { CARTA } from 'carta-protobuf'; +import * as Long from 'long'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; +import { take } from 'rxjs/operators'; + +let connectTimeout = config.timeout.connection; +let testServerUrl: string = config.serverURL0; +let testSubdirectory: string = config.path.performance; +let openFileTimeout: number = config.timeout.openFile; +let readFileTimeout: number = config.timeout.readFile; +let playAnimatorTimeout = config.timeout.playAnimator; + +interface AssertItem { + registerViewer: CARTA.IRegisterViewer; + filelist: CARTA.IFileListRequest; + openFile: CARTA.IOpenFile; + addTilesReq: CARTA.IAddRequiredTiles; + setContour: CARTA.ISetContourParameters; + startAnimation: CARTA.IStartAnimation[]; + stopAnimation: CARTA.IStopAnimation[]; + animationFlowControl: CARTA.IAnimationFlowControl[]; + setImageChannel: CARTA.ISetImageChannels[]; +} + +let assertItem: AssertItem = { + registerViewer: { + sessionId: 0, + clientFeatureFlags: 5, + }, + filelist: { directory: testSubdirectory }, + openFile: { + directory: testSubdirectory, + file: 'cube_B_06400_z00100.fits', + hdu: '', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, + addTilesReq: { + fileId: 0, + compressionQuality: 11, + compressionType: CARTA.CompressionType.ZFP, + tiles: [0], + }, + setContour: { + fileId: 0, + referenceFileId: 0, + imageBounds: { + xMin: 0, + xMax: 640, + yMin: 0, + yMax: 800, + }, + levels: [-0.01, 0.01], + smoothingMode: CARTA.SmoothingMode.GaussianBlur, + smoothingFactor: 4, + decimationFactor: 4, + compressionLevel: 8, + contourChunkSize: 100000, + }, + startAnimation: [ + { + fileId: 0, + startFrame: { channel: 1, stokes: 0 }, + firstFrame: { channel: 0, stokes: 0 }, + lastFrame: { channel: 44, stokes: 0 }, + deltaFrame: { channel: 1, stokes: 0 }, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 9, + }, + looping: false, + reverse: false, + frameRate: 5, + }, + { + fileId: 0, + startFrame: { channel: 40, stokes: 0 }, + firstFrame: { channel: 0, stokes: 0 }, + lastFrame: { channel: 44, stokes: 0 }, + deltaFrame: { channel: -1, stokes: 0 }, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 9, + }, + looping: false, + reverse: false, + frameRate: 5, + }, + ], + stopAnimation: [ + { + fileId: 0, + endFrame: { channel: 30, stokes: 0 }, + }, + { + fileId: 0, + endFrame: { channel: 30, stokes: 0 }, + }, + ], + animationFlowControl: [ + { + fileId: 0, + animationId: 1, + }, + { + fileId: 0, + animationId: 2, + }, + ], + setImageChannel: [ + { + fileId: 0, + channel: 0, + stokes: 0, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 11, + }, + }, + { + fileId: 0, + channel: 40, + stokes: 0, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 11, + }, + }, + ], +}; + +describe('ANIMATOR_CONTOUR: Testing animation playback with contour lines', () => { + const msgController = MessageController.Instance; + describe(`Register a session`, () => { + beforeAll(async () => { + await msgController.connect(testServerUrl); + }, connectTimeout); + + checkConnection(); + let basepath: string; + test(`Get basepath`, async () => { + let fileListResponse = await msgController.getFileList('$BASE', 0); + basepath = fileListResponse.directory; + }); + + describe(`Go to "${assertItem.filelist.directory}" folder`, () => { + let OpenFileResponse: CARTA.IOpenFileAck; + test( + `"${assertItem.openFile.file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + assertItem.openFile.directory = basepath + '/' + assertItem.filelist.directory; + OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + expect(RegionHistrogramDataResponse.length).toEqual(1); + }, + openFileTimeout + ); + + test( + `Preparation`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setContourParameters(assertItem.setContour); + let ContourImageDataResponse = await Stream( + CARTA.ContourImageData, + assertItem.setContour.levels.length + ); + }, + readFileTimeout + ); + }); + + describe(`(Case 1):Play some channels forwardly`, () => { + test(`Preparation`, async () => { + msgController.setChannels(assertItem.setImageChannel[0]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.setImageChannel[0].requiredTiles.tiles.length + 2 + ); + }); + + let regionHistogramData: CARTA.RegionHistogramData[] = []; + let RasterTileSequence: number[] = []; + let HistogramSequence: number[] = []; + let ContourSequence: number[] = []; + test( + `Image should return one after one and the last channel is correct:`, + async () => { + let StartAnimationResponse: CARTA.IStartAnimationAck; + StartAnimationResponse = await msgController.startAnimation(assertItem.startAnimation[0]); + expect(StartAnimationResponse.success).toEqual(true); + + for (let i = 0; i < assertItem.stopAnimation[0].endFrame.channel; i++) { + msgController.addRequiredTiles(assertItem.addTilesReq); + let resRegionHistogramData = msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + regionHistogramData.push(data); + HistogramSequence.push(data.channel); + }, + }); + let resContourImageData = msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + ContourSequence.push(data.channel); + }, + }); + + let rasterTileDataResponse = await Stream(CARTA.RasterTileData, 3); + let currentChannel = rasterTileDataResponse[0].channel; + RasterTileSequence.push(currentChannel); + + msgController.sendAnimationFlowControl({ + ...assertItem.animationFlowControl[0], + receivedFrame: { + channel: currentChannel, + stokes: 0, + }, + timestamp: Long.fromNumber(Date.now()), + }); + } + + // Pick up the streaming messages + // Channel 11 & 12: RasterTileData + RasterTileSync(start & end) + RegionHistogramData + let RegionHistogramDataChannel11: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel11.push(data); + }); + let RasterTileDataChannel11 = await Stream(CARTA.RasterTileData, 3); + + let RegionHistogramDataChannel12: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel12.push(data); + }); + let RasterTileDataChannel12 = await Stream(CARTA.RasterTileData, 3); + + // // Send StopAnimator + msgController.stopAnimation(assertItem.stopAnimation[0]); + msgController.setChannels(assertItem.setImageChannel[0]); + + let lastRegionHistogramData: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + lastRegionHistogramData.push(data); + }, + }); + let lastContourImageData: CARTA.ContourImageData[] = []; + msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + lastContourImageData.push(data); + }, + }); + + let lastRasterTileData = await Stream(CARTA.RasterTileData, 3); + }, + playAnimatorTimeout + ); + + test(`Received RasterTileData channels should be in sequence`, async () => { + console.log(`(Step 1) Sequent channel index: ${RasterTileSequence}`); + RasterTileSequence.map((id, index) => { + let channelId = + index + + assertItem.startAnimation[0].startFrame.channel + + assertItem.startAnimation[0].deltaFrame.channel - + 1; + expect(id).toEqual(channelId); + }); + }); + + test(`Received ContourData channels should be in sequence`, async () => { + for (let i = 1; i <= assertItem.stopAnimation[0].endFrame.channel; i++) { + expect(ContourSequence[(i - 1) * 2]).toEqual(i); + expect(ContourSequence[(i - 1) * 2 + 1]).toEqual(i); + } + }); + + test(`Received RegionHistogramData channels should be in sequence`, async () => { + for (let i = 1; i <= assertItem.stopAnimation[0].endFrame.channel; i++) { + expect(HistogramSequence[i - 1]).toEqual(i); + } + }); + }); + afterAll(() => msgController.closeConnection()); + }); +}); + +describe('ANIMATOR_CONTOUR: Testing animation playback with contour lines', () => { + const msgController = MessageController.Instance; + describe(`Register a session`, () => { + beforeAll(async () => { + await msgController.connect(testServerUrl); + }, connectTimeout); + + checkConnection(); + let basepath: string; + test(`Get basepath`, async () => { + let fileListResponse = await msgController.getFileList('$BASE', 0); + basepath = fileListResponse.directory; + }); + + describe(`Go to "${assertItem.filelist.directory}" folder`, () => { + let OpenFileResponse: CARTA.IOpenFileAck; + test( + `"${assertItem.openFile.file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + assertItem.openFile.directory = basepath + '/' + assertItem.filelist.directory; + OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + expect(RegionHistrogramDataResponse.length).toEqual(1); + }, + openFileTimeout + ); + + test( + `Preparation`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setContourParameters(assertItem.setContour); + let ContourImageDataResponse = await Stream( + CARTA.ContourImageData, + assertItem.setContour.levels.length + ); + }, + readFileTimeout + ); + }); + + describe(`(Case 2) Play some channels backwardly`, () => { + test(`Preparation`, async () => { + msgController.setChannels(assertItem.setImageChannel[1]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.setImageChannel[1].requiredTiles.tiles.length + 2 + ); + }); + + let regionHistogramData: CARTA.RegionHistogramData[] = []; + let RasterTileSequence: number[] = []; + let HistogramSequence: number[] = []; + let ContourSequence: number[] = []; + test( + `Image should return one after one and the last channel is correct:`, + async () => { + let StartAnimationResponse: CARTA.IStartAnimationAck; + StartAnimationResponse = await msgController.startAnimation(assertItem.startAnimation[1]); + expect(StartAnimationResponse.success).toEqual(true); + + for ( + let i = assertItem.startAnimation[1].startFrame.channel; + i > assertItem.stopAnimation[1].endFrame.channel - 1; + i-- + ) { + msgController.addRequiredTiles(assertItem.addTilesReq); + let resRegionHistogramData = msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + regionHistogramData.push(data); + HistogramSequence.push(data.channel); + }, + }); + let resContourImageData = msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + ContourSequence.push(data.channel); + }, + }); + + let rasterTileDataResponse = await Stream(CARTA.RasterTileData, 3); + let currentChannel = rasterTileDataResponse[0].channel; + RasterTileSequence.push(currentChannel); + + msgController.sendAnimationFlowControl({ + ...assertItem.animationFlowControl[0], + receivedFrame: { + channel: currentChannel, + stokes: 0, + }, + timestamp: Long.fromNumber(Date.now()), + }); + } + + // Pick up the streaming messages + // Channel 8 & 7: RasterTileData + RasterTileSync(start & end) + RegionHistogramData + let RegionHistogramDataChannel8: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel8.push(data); + }); + let RasterTileDataChannel8 = await Stream(CARTA.RasterTileData, 3); + + let RegionHistogramDataChannel7: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel7.push(data); + }); + let RasterTileDataChannel7 = await Stream(CARTA.RasterTileData, 3); + + // // Send StopAnimator + msgController.stopAnimation(assertItem.stopAnimation[1]); + msgController.setChannels(assertItem.setImageChannel[1]); + + let lastRegionHistogramData: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + lastRegionHistogramData.push(data); + }, + }); + let lastContourImageData: CARTA.ContourImageData[] = []; + msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + lastContourImageData.push(data); + }, + }); + + let lastRasterTileData = await Stream(CARTA.RasterTileData, 3); + }, + playAnimatorTimeout + ); + + test(`Received RasterTileData channels should be in sequence`, async () => { + console.log(`(Step 2) Sequent channel index: ${RasterTileSequence}`); + RasterTileSequence.map((id, index) => { + let channelId = -index + assertItem.startAnimation[1].startFrame.channel - 1; + expect(id).toEqual(channelId); + }); + }); + + test(`Received ContourData channels should be in sequence`, async () => { + let index = 1; + for ( + let i = assertItem.startAnimation[1].startFrame.channel - 1; + i > assertItem.stopAnimation[1].endFrame.channel - 2; + i-- + ) { + expect(ContourSequence[(index - 1) * 2]).toEqual(i); + expect(ContourSequence[(index - 1) * 2 + 1]).toEqual(i); + index++; + } + }); + + test(`Received RegionHistogramData channels should be in sequence`, async () => { + let index = 1; + for ( + let i = assertItem.startAnimation[1].startFrame.channel - 1; + i > assertItem.stopAnimation[1].endFrame.channel - 2; + i-- + ) { + expect(HistogramSequence[index - 1]).toEqual(i); + index++; + } + }); + }); + + afterAll(() => msgController.closeConnection()); + }); +}); diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts new file mode 100644 index 0000000..498e749 --- /dev/null +++ b/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts @@ -0,0 +1,475 @@ +import { CARTA } from 'carta-protobuf'; +import * as Long from 'long'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; +import { take } from 'rxjs/operators'; + +let connectTimeout = config.timeout.connection; +let testServerUrl: string = config.serverURL0; +let testSubdirectory: string = config.path.performance; +let openFileTimeout: number = config.timeout.openFile; +let readFileTimeout: number = config.timeout.readFile; +let playAnimatorTimeout = config.timeout.playAnimator; + +interface AssertItem { + registerViewer: CARTA.IRegisterViewer; + filelist: CARTA.IFileListRequest; + openFile: CARTA.IOpenFile; + addTilesReq: CARTA.IAddRequiredTiles; + setContour: CARTA.ISetContourParameters; + startAnimation: CARTA.IStartAnimation[]; + stopAnimation: CARTA.IStopAnimation[]; + animationFlowControl: CARTA.IAnimationFlowControl[]; + setImageChannel: CARTA.ISetImageChannels[]; +} + +let assertItem: AssertItem = { + registerViewer: { + sessionId: 0, + clientFeatureFlags: 5, + }, + filelist: { directory: testSubdirectory }, + openFile: { + directory: testSubdirectory, + file: 'cube_B_06400_z00100.hdf5', + hdu: '', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, + addTilesReq: { + fileId: 0, + compressionQuality: 11, + compressionType: CARTA.CompressionType.ZFP, + tiles: [0], + }, + setContour: { + fileId: 0, + referenceFileId: 0, + imageBounds: { + xMin: 0, + xMax: 640, + yMin: 0, + yMax: 800, + }, + levels: [-0.01, 0.01], + smoothingMode: CARTA.SmoothingMode.GaussianBlur, + smoothingFactor: 4, + decimationFactor: 4, + compressionLevel: 8, + contourChunkSize: 100000, + }, + startAnimation: [ + { + fileId: 0, + startFrame: { channel: 1, stokes: 0 }, + firstFrame: { channel: 0, stokes: 0 }, + lastFrame: { channel: 44, stokes: 0 }, + deltaFrame: { channel: 1, stokes: 0 }, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 9, + }, + looping: false, + reverse: false, + frameRate: 5, + }, + { + fileId: 0, + startFrame: { channel: 40, stokes: 0 }, + firstFrame: { channel: 0, stokes: 0 }, + lastFrame: { channel: 44, stokes: 0 }, + deltaFrame: { channel: -1, stokes: 0 }, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 9, + }, + looping: false, + reverse: false, + frameRate: 5, + }, + ], + stopAnimation: [ + { + fileId: 0, + endFrame: { channel: 30, stokes: 0 }, + }, + { + fileId: 0, + endFrame: { channel: 30, stokes: 0 }, + }, + ], + animationFlowControl: [ + { + fileId: 0, + animationId: 1, + }, + { + fileId: 0, + animationId: 2, + }, + ], + setImageChannel: [ + { + fileId: 0, + channel: 0, + stokes: 0, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 11, + }, + }, + { + fileId: 0, + channel: 40, + stokes: 0, + requiredTiles: { + fileId: 0, + tiles: [0], + compressionType: CARTA.CompressionType.ZFP, + compressionQuality: 11, + }, + }, + ], +}; + +describe('ANIMATOR_CONTOUR: Testing animation playback with contour lines', () => { + const msgController = MessageController.Instance; + describe(`Register a session`, () => { + beforeAll(async () => { + await msgController.connect(testServerUrl); + }, connectTimeout); + + checkConnection(); + let basepath: string; + test(`Get basepath`, async () => { + let fileListResponse = await msgController.getFileList('$BASE', 0); + basepath = fileListResponse.directory; + }); + + describe(`Go to "${assertItem.filelist.directory}" folder`, () => { + let OpenFileResponse: CARTA.IOpenFileAck; + test( + `"${assertItem.openFile.file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + assertItem.openFile.directory = basepath + '/' + assertItem.filelist.directory; + OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + expect(RegionHistrogramDataResponse.length).toEqual(1); + }, + openFileTimeout + ); + + test( + `Preparation`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setContourParameters(assertItem.setContour); + let ContourImageDataResponse = await Stream( + CARTA.ContourImageData, + assertItem.setContour.levels.length + ); + }, + readFileTimeout + ); + }); + + describe(`(Case 1):Play some channels forwardly`, () => { + test(`Preparation`, async () => { + msgController.setChannels(assertItem.setImageChannel[0]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.setImageChannel[0].requiredTiles.tiles.length + 2 + ); + }); + + let regionHistogramData: CARTA.RegionHistogramData[] = []; + let RasterTileSequence: number[] = []; + let HistogramSequence: number[] = []; + let ContourSequence: number[] = []; + test( + `Image should return one after one and the last channel is correct:`, + async () => { + let StartAnimationResponse: CARTA.IStartAnimationAck; + StartAnimationResponse = await msgController.startAnimation(assertItem.startAnimation[0]); + expect(StartAnimationResponse.success).toEqual(true); + + for (let i = 0; i < assertItem.stopAnimation[0].endFrame.channel; i++) { + msgController.addRequiredTiles(assertItem.addTilesReq); + let resRegionHistogramData = msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + regionHistogramData.push(data); + HistogramSequence.push(data.channel); + }, + }); + let resContourImageData = msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + ContourSequence.push(data.channel); + }, + }); + + let rasterTileDataResponse = await Stream(CARTA.RasterTileData, 3); + let currentChannel = rasterTileDataResponse[0].channel; + RasterTileSequence.push(currentChannel); + + msgController.sendAnimationFlowControl({ + ...assertItem.animationFlowControl[0], + receivedFrame: { + channel: currentChannel, + stokes: 0, + }, + timestamp: Long.fromNumber(Date.now()), + }); + } + + // Pick up the streaming messages + // Channel 11 & 12: RasterTileData + RasterTileSync(start & end) + RegionHistogramData + let RegionHistogramDataChannel11: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel11.push(data); + }); + let RasterTileDataChannel11 = await Stream(CARTA.RasterTileData, 3); + + let RegionHistogramDataChannel12: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel12.push(data); + }); + let RasterTileDataChannel12 = await Stream(CARTA.RasterTileData, 3); + + // // Send StopAnimator + msgController.stopAnimation(assertItem.stopAnimation[0]); + msgController.setChannels(assertItem.setImageChannel[0]); + + let lastRegionHistogramData: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + lastRegionHistogramData.push(data); + }, + }); + let lastContourImageData: CARTA.ContourImageData[] = []; + msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + lastContourImageData.push(data); + }, + }); + + let lastRasterTileData = await Stream(CARTA.RasterTileData, 3); + }, + playAnimatorTimeout + ); + + test(`Received RasterTileData channels should be in sequence`, async () => { + console.log(`(Step 1) Sequent channel index: ${RasterTileSequence}`); + RasterTileSequence.map((id, index) => { + let channelId = + index + + assertItem.startAnimation[0].startFrame.channel + + assertItem.startAnimation[0].deltaFrame.channel - + 1; + expect(id).toEqual(channelId); + }); + }); + + test(`Received ContourData channels should be in sequence`, async () => { + for (let i = 1; i <= assertItem.stopAnimation[0].endFrame.channel; i++) { + expect(ContourSequence[(i - 1) * 2]).toEqual(i); + expect(ContourSequence[(i - 1) * 2 + 1]).toEqual(i); + } + }); + + test(`Received RegionHistogramData channels should be in sequence`, async () => { + for (let i = 1; i <= assertItem.stopAnimation[0].endFrame.channel; i++) { + expect(HistogramSequence[i - 1]).toEqual(i); + } + }); + }); + afterAll(() => msgController.closeConnection()); + }); +}); + +describe('ANIMATOR_CONTOUR: Testing animation playback with contour lines', () => { + const msgController = MessageController.Instance; + describe(`Register a session`, () => { + beforeAll(async () => { + await msgController.connect(testServerUrl); + }, connectTimeout); + + checkConnection(); + let basepath: string; + test(`Get basepath`, async () => { + let fileListResponse = await msgController.getFileList('$BASE', 0); + basepath = fileListResponse.directory; + }); + + describe(`Go to "${assertItem.filelist.directory}" folder`, () => { + let OpenFileResponse: CARTA.IOpenFileAck; + test( + `"${assertItem.openFile.file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + assertItem.openFile.directory = basepath + '/' + assertItem.filelist.directory; + OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + expect(RegionHistrogramDataResponse.length).toEqual(1); + }, + openFileTimeout + ); + + test( + `Preparation`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setContourParameters(assertItem.setContour); + let ContourImageDataResponse = await Stream( + CARTA.ContourImageData, + assertItem.setContour.levels.length + ); + }, + readFileTimeout + ); + }); + + describe(`(Case 2) Play some channels backwardly`, () => { + test(`Preparation`, async () => { + msgController.setChannels(assertItem.setImageChannel[1]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.setImageChannel[1].requiredTiles.tiles.length + 2 + ); + }); + + let regionHistogramData: CARTA.RegionHistogramData[] = []; + let RasterTileSequence: number[] = []; + let HistogramSequence: number[] = []; + let ContourSequence: number[] = []; + test( + `Image should return one after one and the last channel is correct:`, + async () => { + let StartAnimationResponse: CARTA.IStartAnimationAck; + StartAnimationResponse = await msgController.startAnimation(assertItem.startAnimation[1]); + expect(StartAnimationResponse.success).toEqual(true); + + for ( + let i = assertItem.startAnimation[1].startFrame.channel; + i > assertItem.stopAnimation[1].endFrame.channel - 1; + i-- + ) { + msgController.addRequiredTiles(assertItem.addTilesReq); + let resRegionHistogramData = msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + regionHistogramData.push(data); + HistogramSequence.push(data.channel); + }, + }); + let resContourImageData = msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + ContourSequence.push(data.channel); + }, + }); + + let rasterTileDataResponse = await Stream(CARTA.RasterTileData, 3); + let currentChannel = rasterTileDataResponse[0].channel; + RasterTileSequence.push(currentChannel); + + msgController.sendAnimationFlowControl({ + ...assertItem.animationFlowControl[0], + receivedFrame: { + channel: currentChannel, + stokes: 0, + }, + timestamp: Long.fromNumber(Date.now()), + }); + } + + // Pick up the streaming messages + // Channel 8 & 7: RasterTileData + RasterTileSync(start & end) + RegionHistogramData + let RegionHistogramDataChannel8: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel8.push(data); + }); + let RasterTileDataChannel8 = await Stream(CARTA.RasterTileData, 3); + + let RegionHistogramDataChannel7: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe((data) => { + RegionHistogramDataChannel7.push(data); + }); + let RasterTileDataChannel7 = await Stream(CARTA.RasterTileData, 3); + + // // Send StopAnimator + msgController.stopAnimation(assertItem.stopAnimation[1]); + msgController.setChannels(assertItem.setImageChannel[1]); + + let lastRegionHistogramData: CARTA.RegionHistogramData[] = []; + msgController.histogramStream.pipe(take(1)).subscribe({ + next: (data) => { + lastRegionHistogramData.push(data); + }, + }); + let lastContourImageData: CARTA.ContourImageData[] = []; + msgController.contourStream.pipe(take(2)).subscribe({ + next: (data) => { + lastContourImageData.push(data); + }, + }); + + let lastRasterTileData = await Stream(CARTA.RasterTileData, 3); + }, + playAnimatorTimeout + ); + + test(`Received RasterTileData channels should be in sequence`, async () => { + console.log(`(Step 2) Sequent channel index: ${RasterTileSequence}`); + RasterTileSequence.map((id, index) => { + let channelId = -index + assertItem.startAnimation[1].startFrame.channel - 1; + expect(id).toEqual(channelId); + }); + }); + + test(`Received ContourData channels should be in sequence`, async () => { + let index = 1; + for ( + let i = assertItem.startAnimation[1].startFrame.channel - 1; + i > assertItem.stopAnimation[1].endFrame.channel - 2; + i-- + ) { + expect(ContourSequence[(index - 1) * 2]).toEqual(i); + expect(ContourSequence[(index - 1) * 2 + 1]).toEqual(i); + index++; + } + }); + + test(`Received RegionHistogramData channels should be in sequence`, async () => { + let index = 1; + for ( + let i = assertItem.startAnimation[1].startFrame.channel - 1; + i > assertItem.stopAnimation[1].endFrame.channel - 2; + i-- + ) { + expect(HistogramSequence[index - 1]).toEqual(i); + index++; + } + }); + }); + + afterAll(() => msgController.closeConnection()); + }); +}); From 84141ecd169e5095eb93b82d87ea0b324c63d914 Mon Sep 17 00:00:00 2001 From: Cheng-Chin Chiang Date: Wed, 12 Nov 2025 11:14:51 +0800 Subject: [PATCH 5/7] Unify the code style --- .../PERF_CONTOUR_DATA_Mode0.test.ts | 165 +++++++------- .../PERF_CONTOUR_DATA_Mode1.test.ts | 163 +++++++------- .../PERF_CONTOUR_DATA_Mode2.test.ts | 163 +++++++------- .../PERF_CUBE_HISTOGRAM_CASA.test.ts | 117 +++++----- .../PERF_CUBE_HISTOGRAM_FITS.test.ts | 117 +++++----- .../PERF_CUBE_HISTOGRAM_HDF5.test.ts | 117 +++++----- src/performance/PERF_LOAD_IMAGE_CASA.test.ts | 80 ++++--- src/performance/PERF_LOAD_IMAGE_FITS.test.ts | 80 ++++--- src/performance/PERF_LOAD_IMAGE_HDF5.test.ts | 80 ++++--- src/performance/PERF_MOMENTS_CASA.test.ts | 201 ++++++++++-------- src/performance/PERF_MOMENTS_FITS.test.ts | 201 ++++++++++-------- src/performance/PERF_MOMENTS_HDF5.test.ts | 201 ++++++++++-------- src/performance/PERF_PV_CASA.test.ts | 178 +++++++++------- src/performance/PERF_PV_FITS.test.ts | 178 +++++++++------- src/performance/PERF_PV_HDF5.test.ts | 178 +++++++++------- .../PERF_RASTER_TILE_DATA_CASA.test.ts | 102 +++++---- .../PERF_RASTER_TILE_DATA_FITS.test.ts | 102 +++++---- .../PERF_RASTER_TILE_DATA_HDF5.test.ts | 102 +++++---- .../PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts | 153 +++++++------ .../PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts | 153 +++++++------ .../PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts | 153 +++++++------ src/performance/parsing.ts | 142 ------------- 22 files changed, 1753 insertions(+), 1373 deletions(-) delete mode 100644 src/performance/parsing.ts diff --git a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts index f4a8099..731d7c4 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -17,19 +17,18 @@ interface AssertItem { initSpatialRequirements: CARTA.ISetSpatialRequirements; initContour: CARTA.ISetContourParameters; setContour: CARTA.ISetContourParameters[]; -}; +} let assertItem: AssertItem = { - fileOpen: - [ - { - directory: testSubdirectory, - file: "h_m51_b_s05_drz_sci.fits", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, - ], + fileOpen: [ + { + directory: testSubdirectory, + file: 'h_m51_b_s05_drz_sci.fits', + hdu: '0', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, + ], initTilesReq: { fileId: 0, compressionQuality: 11, @@ -40,15 +39,14 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, - initContour:{ - fileId:0, - referenceFileId:0, + initContour: { + fileId: 0, + referenceFileId: 0, }, setContour: [ { @@ -61,79 +59,98 @@ let assertItem: AssertItem = { decimationFactor: 4, compressionLevel: 8, contourChunkSize: 100000, - } + }, ], }; let basepath: string; -describe("PERF_CONTOUR_DATA",()=>{ +describe('PERF_CONTOUR_DATA', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - test(`(Step 2) smoothingMode of ${assertItem.setContour[0].smoothingMode} ContourImageData responses should arrive within ${playContourTimeout} ms`, async () => { - msgController.setContourParameters(assertItem.initContour); - msgController.setContourParameters(assertItem.setContour[0]); - - let ContourDataArray = []; - let ContourDataResponse: any; - let count = 0; - - let ContourPromise = new Promise((resolve)=>{ - msgController.contourStream.subscribe({ - next: (data) => { - ContourDataArray.push(data) - if (data.progress === 1) { - count = count + 1 - if (count === assertItem.setContour[0].levels.length) { - resolve(ContourDataArray) + test( + `(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); + + test( + `(Step 2) smoothingMode of ${assertItem.setContour[0].smoothingMode} ContourImageData responses should arrive within ${playContourTimeout} ms`, + async () => { + msgController.setContourParameters(assertItem.initContour); + msgController.setContourParameters(assertItem.setContour[0]); + + let ContourDataArray = []; + let ContourDataResponse: any; + let count = 0; + + let ContourPromise = new Promise((resolve) => { + msgController.contourStream.subscribe({ + next: (data) => { + ContourDataArray.push(data); + if (data.progress === 1) { + count = count + 1; + if (count === assertItem.setContour[0].levels.length) { + resolve(ContourDataArray); + } } - } + }, + }); + }); + + ContourDataResponse = await ContourPromise; + ContourDataResponse.map((data) => { + if (data.progress == 1) { + expect(assertItem.setContour[0].levels).toContain(data.contourSets[0].level); } }); - }); - - ContourDataResponse = await ContourPromise; - ContourDataResponse.map((data) => { - if (data.progress == 1) { - expect(assertItem.setContour[0].levels).toContain(data.contourSets[0].level) - } - }) - }, playContourTimeout) + }, + playContourTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts index 9c66b4c..d67b968 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -17,19 +17,18 @@ interface AssertItem { initSpatialRequirements: CARTA.ISetSpatialRequirements; initContour: CARTA.ISetContourParameters; setContour: CARTA.ISetContourParameters[]; -}; +} let assertItem: AssertItem = { - fileOpen: - [ - { - directory: testSubdirectory, - file: "h_m51_b_s05_drz_sci.fits", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, - ], + fileOpen: [ + { + directory: testSubdirectory, + file: 'h_m51_b_s05_drz_sci.fits', + hdu: '0', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, + ], initTilesReq: { fileId: 0, compressionQuality: 11, @@ -40,15 +39,14 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, - initContour:{ - fileId:0, - referenceFileId:0, + initContour: { + fileId: 0, + referenceFileId: 0, }, setContour: [ { @@ -66,74 +64,93 @@ let assertItem: AssertItem = { }; let basepath: string; -describe("PERF_CONTOUR_DATA",()=>{ +describe('PERF_CONTOUR_DATA', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - test(`(Step 2) smoothingMode of ${assertItem.setContour[0].smoothingMode} ContourImageData responses should arrive within ${playContourTimeout} ms`, async () => { - msgController.setContourParameters(assertItem.initContour); - msgController.setContourParameters(assertItem.setContour[0]); - - let ContourDataArray = []; - let ContourDataResponse: any; - let count = 0; - - let ContourPromise = new Promise((resolve)=>{ - msgController.contourStream.subscribe({ - next: (data) => { - ContourDataArray.push(data) - if (data.progress === 1) { - count = count + 1 - if (count === assertItem.setContour[0].levels.length) { - resolve(ContourDataArray) + test( + `(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); + + test( + `(Step 2) smoothingMode of ${assertItem.setContour[0].smoothingMode} ContourImageData responses should arrive within ${playContourTimeout} ms`, + async () => { + msgController.setContourParameters(assertItem.initContour); + msgController.setContourParameters(assertItem.setContour[0]); + + let ContourDataArray = []; + let ContourDataResponse: any; + let count = 0; + + let ContourPromise = new Promise((resolve) => { + msgController.contourStream.subscribe({ + next: (data) => { + ContourDataArray.push(data); + if (data.progress === 1) { + count = count + 1; + if (count === assertItem.setContour[0].levels.length) { + resolve(ContourDataArray); + } } - } + }, + }); + }); + + ContourDataResponse = await ContourPromise; + ContourDataResponse.map((data) => { + if (data.progress == 1) { + expect(assertItem.setContour[0].levels).toContain(data.contourSets[0].level); } }); - }); - - ContourDataResponse = await ContourPromise; - ContourDataResponse.map((data) => { - if (data.progress == 1) { - expect(assertItem.setContour[0].levels).toContain(data.contourSets[0].level) - } - }) - }, playContourTimeout) + }, + playContourTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts index f5fdfee..e20a287 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -17,19 +17,18 @@ interface AssertItem { initSpatialRequirements: CARTA.ISetSpatialRequirements; initContour: CARTA.ISetContourParameters; setContour: CARTA.ISetContourParameters[]; -}; +} let assertItem: AssertItem = { - fileOpen: - [ - { - directory: testSubdirectory, - file: "h_m51_b_s05_drz_sci.fits", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, - ], + fileOpen: [ + { + directory: testSubdirectory, + file: 'h_m51_b_s05_drz_sci.fits', + hdu: '0', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, + ], initTilesReq: { fileId: 0, compressionQuality: 11, @@ -40,15 +39,14 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, - initContour:{ - fileId:0, - referenceFileId:0, + initContour: { + fileId: 0, + referenceFileId: 0, }, setContour: [ { @@ -66,74 +64,93 @@ let assertItem: AssertItem = { }; let basepath: string; -describe("PERF_CONTOUR_DATA",()=>{ +describe('PERF_CONTOUR_DATA', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - test(`(Step 2) smoothingMode of ${assertItem.setContour[0].smoothingMode} ContourImageData responses should arrive within ${playContourTimeout} ms`, async () => { - msgController.setContourParameters(assertItem.initContour); - msgController.setContourParameters(assertItem.setContour[0]); - - let ContourDataArray = []; - let ContourDataResponse: any; - let count = 0; - - let ContourPromise = new Promise((resolve)=>{ - msgController.contourStream.subscribe({ - next: (data) => { - ContourDataArray.push(data) - if (data.progress === 1) { - count = count + 1 - if (count === assertItem.setContour[0].levels.length) { - resolve(ContourDataArray) + test( + `(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 1) smoothingMode of ${assertItem.setContour[0].smoothingMode} SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); + + test( + `(Step 2) smoothingMode of ${assertItem.setContour[0].smoothingMode} ContourImageData responses should arrive within ${playContourTimeout} ms`, + async () => { + msgController.setContourParameters(assertItem.initContour); + msgController.setContourParameters(assertItem.setContour[0]); + + let ContourDataArray = []; + let ContourDataResponse: any; + let count = 0; + + let ContourPromise = new Promise((resolve) => { + msgController.contourStream.subscribe({ + next: (data) => { + ContourDataArray.push(data); + if (data.progress === 1) { + count = count + 1; + if (count === assertItem.setContour[0].levels.length) { + resolve(ContourDataArray); + } } - } + }, + }); + }); + + ContourDataResponse = await ContourPromise; + ContourDataResponse.map((data) => { + if (data.progress == 1) { + expect(assertItem.setContour[0].levels).toContain(data.contourSets[0].level); } }); - }); - - ContourDataResponse = await ContourPromise; - ContourDataResponse.map((data) => { - if (data.progress == 1) { - expect(assertItem.setContour[0].levels).toContain(data.contourSets[0].level) - } - }) - }, playContourTimeout) + }, + playContourTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts index 9c0d0f0..a5ae6fc 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -21,8 +21,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.image", - hdu: "0", + file: 'cube_B_06400_z00100.image', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -37,11 +37,10 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, histogram: { fileId: 0, @@ -49,72 +48,90 @@ let assertItem: AssertItem = { histograms: [{ channel: -2, numBins: -1 }], }, cubeHistogramTimeout: [300000], -} +}; let basepath: string; -describe("PERF_CUBE_HISTOGRAM",()=>{ +describe('PERF_CUBE_HISTOGRAM', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); describe(`Set histogram requirements:`, () => { let RegionHistogramDataTemp = []; let ReceiveProgress: number; let RegionHistogramData: CARTA.RegionHistogramData; - test(`(Step 2)"${assertItem.fileOpen[0].file}" REGION_HISTOGRAM_DATA should arrive completely within ${assertItem.cubeHistogramTimeout[0]} ms:`, async () => { - msgController.setHistogramRequirements(assertItem.histogram); - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - RegionHistogramDataTemp.push(data) - if (data.progress === 1) { - resolve(RegionHistogramDataTemp) - } - } - }) - }); - - let regionHistogramDataResponse = await regionHistogramDataPromise; - RegionHistogramData = regionHistogramDataResponse.slice(-1)[0] - ReceiveProgress = RegionHistogramData.progress; - expect(ReceiveProgress).toEqual(1); - }, assertItem.cubeHistogramTimeout[0]); - }); + test( + `(Step 2)"${assertItem.fileOpen[0].file}" REGION_HISTOGRAM_DATA should arrive completely within ${assertItem.cubeHistogramTimeout[0]} ms:`, + async () => { + msgController.setHistogramRequirements(assertItem.histogram); + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + RegionHistogramDataTemp.push(data); + if (data.progress === 1) { + resolve(RegionHistogramDataTemp); + } + }, + }); + }); + let regionHistogramDataResponse = await regionHistogramDataPromise; + RegionHistogramData = regionHistogramDataResponse.slice(-1)[0]; + ReceiveProgress = RegionHistogramData.progress; + expect(ReceiveProgress).toEqual(1); + }, + assertItem.cubeHistogramTimeout[0] + ); + }); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts index c2b59e3..39aff25 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -21,8 +21,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.fits", - hdu: "0", + file: 'cube_B_06400_z00100.fits', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -37,11 +37,10 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, histogram: { fileId: 0, @@ -49,72 +48,90 @@ let assertItem: AssertItem = { histograms: [{ channel: -2, numBins: -1 }], }, cubeHistogramTimeout: [300000], -} +}; let basepath: string; -describe("PERF_CUBE_HISTOGRAM",()=>{ +describe('PERF_CUBE_HISTOGRAM', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); describe(`Set histogram requirements:`, () => { let RegionHistogramDataTemp = []; let ReceiveProgress: number; let RegionHistogramData: CARTA.RegionHistogramData; - test(`(Step 2)"${assertItem.fileOpen[0].file}" REGION_HISTOGRAM_DATA should arrive completely within ${assertItem.cubeHistogramTimeout[0]} ms:`, async () => { - msgController.setHistogramRequirements(assertItem.histogram); - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - RegionHistogramDataTemp.push(data) - if (data.progress === 1) { - resolve(RegionHistogramDataTemp) - } - } - }) - }); - - let regionHistogramDataResponse = await regionHistogramDataPromise; - RegionHistogramData = regionHistogramDataResponse.slice(-1)[0] - ReceiveProgress = RegionHistogramData.progress; - expect(ReceiveProgress).toEqual(1); - }, assertItem.cubeHistogramTimeout[0]); - }); + test( + `(Step 2)"${assertItem.fileOpen[0].file}" REGION_HISTOGRAM_DATA should arrive completely within ${assertItem.cubeHistogramTimeout[0]} ms:`, + async () => { + msgController.setHistogramRequirements(assertItem.histogram); + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + RegionHistogramDataTemp.push(data); + if (data.progress === 1) { + resolve(RegionHistogramDataTemp); + } + }, + }); + }); + let regionHistogramDataResponse = await regionHistogramDataPromise; + RegionHistogramData = regionHistogramDataResponse.slice(-1)[0]; + ReceiveProgress = RegionHistogramData.progress; + expect(ReceiveProgress).toEqual(1); + }, + assertItem.cubeHistogramTimeout[0] + ); + }); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts index 3e99c81..0e466df 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -21,8 +21,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.hdf5", - hdu: "0", + file: 'cube_B_06400_z00100.hdf5', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -37,11 +37,10 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, histogram: { fileId: 0, @@ -49,72 +48,90 @@ let assertItem: AssertItem = { histograms: [{ channel: -2, numBins: -1 }], }, cubeHistogramTimeout: [500], -} +}; let basepath: string; -describe("PERF_CUBE_HISTOGRAM",()=>{ +describe('PERF_CUBE_HISTOGRAM', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); describe(`Set histogram requirements:`, () => { let RegionHistogramDataTemp = []; let ReceiveProgress: number; let RegionHistogramData: CARTA.RegionHistogramData; - test(`(Step 2)"${assertItem.fileOpen[0].file}" REGION_HISTOGRAM_DATA should arrive completely within ${assertItem.cubeHistogramTimeout[0]} ms:`, async () => { - msgController.setHistogramRequirements(assertItem.histogram); - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - RegionHistogramDataTemp.push(data) - if (data.progress === 1) { - resolve(RegionHistogramDataTemp) - } - } - }) - }); - - let regionHistogramDataResponse = await regionHistogramDataPromise; - RegionHistogramData = regionHistogramDataResponse.slice(-1)[0] - ReceiveProgress = RegionHistogramData.progress; - expect(ReceiveProgress).toEqual(1); - }, assertItem.cubeHistogramTimeout[0]); - }); + test( + `(Step 2)"${assertItem.fileOpen[0].file}" REGION_HISTOGRAM_DATA should arrive completely within ${assertItem.cubeHistogramTimeout[0]} ms:`, + async () => { + msgController.setHistogramRequirements(assertItem.histogram); + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + RegionHistogramDataTemp.push(data); + if (data.progress === 1) { + resolve(RegionHistogramDataTemp); + } + }, + }); + }); + let regionHistogramDataResponse = await regionHistogramDataPromise; + RegionHistogramData = regionHistogramDataResponse.slice(-1)[0]; + ReceiveProgress = RegionHistogramData.progress; + expect(ReceiveProgress).toEqual(1); + }, + assertItem.cubeHistogramTimeout[0] + ); + }); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts index e7406d7..deb6756 100644 --- a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -19,8 +19,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.image", - hdu: "0", + file: 'cube_B_06400_z00100.image', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -35,54 +35,70 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate: "x", mip: 1}, {coordinate: "y", mip: 1}], + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, -} +}; let basepath: string; -describe("PERF_LOAD_IMAGE",()=>{ +describe('PERF_LOAD_IMAGE', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts index 6bd583c..9793685 100644 --- a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -19,8 +19,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.fits", - hdu: "0", + file: 'cube_B_06400_z00100.fits', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -35,54 +35,70 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate: "x", mip: 1}, {coordinate: "y", mip: 1}], + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, -} +}; let basepath: string; -describe("PERF_LOAD_IMAGE",()=>{ +describe('PERF_LOAD_IMAGE', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts index c450902..ce19c48 100644 --- a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -19,8 +19,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.hdf5", - hdu: "0", + file: 'cube_B_06400_z00100.hdf5', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -35,54 +35,70 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate: "x", mip: 1}, {coordinate: "y", mip: 1}], + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, -} +}; let basepath: string; -describe("PERF_LOAD_IMAGE",()=>{ +describe('PERF_LOAD_IMAGE', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_MOMENTS_CASA.test.ts b/src/performance/PERF_MOMENTS_CASA.test.ts index 2470991..63c22b1 100644 --- a/src/performance/PERF_MOMENTS_CASA.test.ts +++ b/src/performance/PERF_MOMENTS_CASA.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl = config.serverURL0; let testSubdirectory = config.path.performance; @@ -18,18 +18,18 @@ interface AssertItem { setSpatialReq: CARTA.ISetSpatialRequirements; setSpectralRequirements: CARTA.ISetSpectralRequirements; momentRequest: CARTA.IMomentRequest; -}; +} let assertItem: AssertItem = { precisionDigit: 4, openFile: [ - { - directory: testSubdirectory, - file: "S255_IR_sci.spw25.cube.I.pbcor.image", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, + { + directory: testSubdirectory, + file: 'S255_IR_sci.spw25.cube.I.pbcor.image', + hdu: '0', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, ], addTilesReq: { fileId: 0, @@ -44,12 +44,15 @@ let assertItem: AssertItem = { setSpatialReq: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip: 1}, {coordinate:"y", mip: 1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, setSpectralRequirements: { fileId: 0, regionId: 0, - spectralProfiles: [{ coordinate: "z", statsTypes: [CARTA.StatsType.Sum] }], + spectralProfiles: [{ coordinate: 'z', statsTypes: [CARTA.StatsType.Sum] }], }, momentRequest: { fileId: 0, @@ -63,120 +66,148 @@ let assertItem: AssertItem = { }, }; const momentName = [ - "average", "integrated", "weighted_coord", "weighted_dispersion_coord", - "median", "median_coord", "standard_deviation", "rms", "abs_mean_dev", - "maximum", "maximum_coord", "minimum", "minimum_coord", + 'average', + 'integrated', + 'weighted_coord', + 'weighted_dispersion_coord', + 'median', + 'median_coord', + 'standard_deviation', + 'rms', + 'abs_mean_dev', + 'maximum', + 'maximum_coord', + 'minimum', + 'minimum_coord', ]; -const intensity = [ // Testing intensity at the (5, 5) of each moment image - 0.86652, 2.27450, 302.11578, 31.72338, - 0.91866, 305.16903, 0.18203, 0.88238, 0.09988, - 0.95470, 305.16903, 0.67406, 251.49975, +const intensity = [ + // Testing intensity at the (5, 5) of each moment image + 0.86652, 2.2745, 302.11578, 31.72338, 0.91866, 305.16903, 0.18203, 0.88238, 0.09988, 0.9547, 305.16903, 0.67406, + 251.49975, ]; let basepath: string; -describe("PERF_MOMENT_GENERATOR",()=>{ +describe('PERF_MOMENT_GENERATOR', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.openFile[0].directory = basepath + "/" + assertItem.openFile[0].directory; + assertItem.openFile[0].directory = basepath + '/' + assertItem.openFile[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.openFile[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.openFile[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 2)"${assertItem.openFile[0].file}" Set SET_SPECTRAL_REQUIREMENTS, the responses should arrive within ${setSpectralReqTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.setCursor.fileId, assertItem.setCursor.point.x, assertItem.setCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.setSpatialReq); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq.tiles.length + 2); - - msgController.setSpectralRequirements(assertItem.setSpectralRequirements); - let SpectralProfileDataStreamPromise = new Promise((resolve) => { - msgController.spectralProfileStream.subscribe({ - next: (data) => { - if (data.progress === 1) { - resolve(data) - } - } - }) - }) - let SpectralProfileDataResponse = await SpectralProfileDataStreamPromise as CARTA.SpectralProfileData; - expect(SpectralProfileDataResponse.progress).toEqual(1); - }, setSpectralReqTimeout); + test( + `(Step 1)"${assertItem.openFile[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.openFile[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 2)"${assertItem.openFile[0].file}" Set SET_SPECTRAL_REQUIREMENTS, the responses should arrive within ${setSpectralReqTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.setCursor.fileId, + assertItem.setCursor.point.x, + assertItem.setCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.setSpatialReq); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq.tiles.length + 2); + + msgController.setSpectralRequirements(assertItem.setSpectralRequirements); + let SpectralProfileDataStreamPromise = new Promise((resolve) => { + msgController.spectralProfileStream.subscribe({ + next: (data) => { + if (data.progress === 1) { + resolve(data); + } + }, + }); + }); + let SpectralProfileDataResponse = + (await SpectralProfileDataStreamPromise) as CARTA.SpectralProfileData; + expect(SpectralProfileDataResponse.progress).toEqual(1); + }, + setSpectralReqTimeout + ); let FileId: number[] = []; let regionHistogramDataArray = []; let momentResponse: any; let regionHistogramDataResponse: any; describe(`Moment generator`, () => { - test(`(Step 3)"${assertItem.openFile[0].file}": Receive a series of moment progress within ${momentTimeout}ms`, async () => { - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - regionHistogramDataArray.push(data) - resolve(regionHistogramDataArray) - } - }) - }); - momentResponse = await msgController.requestMoment(assertItem.momentRequest); - regionHistogramDataResponse = await regionHistogramDataPromise; - FileId = regionHistogramDataResponse.map(data => data.fileId); - }, momentTimeout); - - test(`Receive ${assertItem.momentRequest.moments.length} REGION_HISTOGRAM_DATA`,()=>{ + test( + `(Step 3)"${assertItem.openFile[0].file}": Receive a series of moment progress within ${momentTimeout}ms`, + async () => { + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + regionHistogramDataArray.push(data); + resolve(regionHistogramDataArray); + }, + }); + }); + momentResponse = await msgController.requestMoment(assertItem.momentRequest); + regionHistogramDataResponse = await regionHistogramDataPromise; + FileId = regionHistogramDataResponse.map((data) => data.fileId); + }, + momentTimeout + ); + + test(`Receive ${assertItem.momentRequest.moments.length} REGION_HISTOGRAM_DATA`, () => { expect(FileId.length).toEqual(assertItem.momentRequest.moments.length); }); - test(`Assert MomentResponse.success = true`,()=>{ + test(`Assert MomentResponse.success = true`, () => { expect(momentResponse.success).toBe(true); }); - test(`Assert MomentResponse.openFileAcks.length = ${assertItem.momentRequest.moments.length}`,()=>{ + test(`Assert MomentResponse.openFileAcks.length = ${assertItem.momentRequest.moments.length}`, () => { expect(momentResponse.openFileAcks.length).toEqual(assertItem.momentRequest.moments.length); }); - test(`Assert all MomentResponse.openFileAcks[].success = true`,()=>{ - momentResponse.openFileAcks.map(ack => { + test(`Assert all MomentResponse.openFileAcks[].success = true`, () => { + momentResponse.openFileAcks.map((ack) => { expect(ack.success).toBe(true); }); }); - test(`Assert all openFileAcks[].fileId > 0`,()=>{ - momentResponse.openFileAcks.map(ack => { + test(`Assert all openFileAcks[].fileId > 0`, () => { + momentResponse.openFileAcks.map((ack) => { expect(ack.fileId).toBeGreaterThan(0); }); }); - test(`Assert openFileAcks[].fileInfo.name`,()=>{ - momentResponse.openFileAcks.map((ack,index)=>{ - expect(ack.fileInfo.name).toEqual(assertItem.openFile[0].file + ".moment." + momentName[index]) + test(`Assert openFileAcks[].fileInfo.name`, () => { + momentResponse.openFileAcks.map((ack, index) => { + expect(ack.fileInfo.name).toEqual(assertItem.openFile[0].file + '.moment.' + momentName[index]); }); }); - }); - }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_MOMENTS_FITS.test.ts b/src/performance/PERF_MOMENTS_FITS.test.ts index 9e92c14..f14cace 100644 --- a/src/performance/PERF_MOMENTS_FITS.test.ts +++ b/src/performance/PERF_MOMENTS_FITS.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl = config.serverURL0; let testSubdirectory = config.path.performance; @@ -18,18 +18,18 @@ interface AssertItem { setSpatialReq: CARTA.ISetSpatialRequirements; setSpectralRequirements: CARTA.ISetSpectralRequirements; momentRequest: CARTA.IMomentRequest; -}; +} let assertItem: AssertItem = { precisionDigit: 4, openFile: [ - { - directory: testSubdirectory, - file: "S255_IR_sci.spw25.cube.I.pbcor.fits", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, + { + directory: testSubdirectory, + file: 'S255_IR_sci.spw25.cube.I.pbcor.fits', + hdu: '0', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, ], addTilesReq: { fileId: 0, @@ -44,12 +44,15 @@ let assertItem: AssertItem = { setSpatialReq: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip: 1}, {coordinate:"y", mip: 1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, setSpectralRequirements: { fileId: 0, regionId: 0, - spectralProfiles: [{ coordinate: "z", statsTypes: [CARTA.StatsType.Sum] }], + spectralProfiles: [{ coordinate: 'z', statsTypes: [CARTA.StatsType.Sum] }], }, momentRequest: { fileId: 0, @@ -63,120 +66,148 @@ let assertItem: AssertItem = { }, }; const momentName = [ - "average", "integrated", "weighted_coord", "weighted_dispersion_coord", - "median", "median_coord", "standard_deviation", "rms", "abs_mean_dev", - "maximum", "maximum_coord", "minimum", "minimum_coord", + 'average', + 'integrated', + 'weighted_coord', + 'weighted_dispersion_coord', + 'median', + 'median_coord', + 'standard_deviation', + 'rms', + 'abs_mean_dev', + 'maximum', + 'maximum_coord', + 'minimum', + 'minimum_coord', ]; -const intensity = [ // Testing intensity at the (5, 5) of each moment image - 0.86652, 2.27450, 302.11578, 31.72338, - 0.91866, 305.16903, 0.18203, 0.88238, 0.09988, - 0.95470, 305.16903, 0.67406, 251.49975, +const intensity = [ + // Testing intensity at the (5, 5) of each moment image + 0.86652, 2.2745, 302.11578, 31.72338, 0.91866, 305.16903, 0.18203, 0.88238, 0.09988, 0.9547, 305.16903, 0.67406, + 251.49975, ]; let basepath: string; -describe("PERF_MOMENT_GENERATOR",()=>{ +describe('PERF_MOMENT_GENERATOR', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.openFile[0].directory = basepath + "/" + assertItem.openFile[0].directory; + assertItem.openFile[0].directory = basepath + '/' + assertItem.openFile[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.openFile[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.openFile[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 2)"${assertItem.openFile[0].file}" Set SET_SPECTRAL_REQUIREMENTS, the responses should arrive within ${setSpectralReqTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.setCursor.fileId, assertItem.setCursor.point.x, assertItem.setCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.setSpatialReq); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq.tiles.length + 2); - - msgController.setSpectralRequirements(assertItem.setSpectralRequirements); - let SpectralProfileDataStreamPromise = new Promise((resolve) => { - msgController.spectralProfileStream.subscribe({ - next: (data) => { - if (data.progress === 1) { - resolve(data) - } - } - }) - }) - let SpectralProfileDataResponse = await SpectralProfileDataStreamPromise as CARTA.SpectralProfileData; - expect(SpectralProfileDataResponse.progress).toEqual(1); - }, setSpectralReqTimeout); + test( + `(Step 1)"${assertItem.openFile[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.openFile[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 2)"${assertItem.openFile[0].file}" Set SET_SPECTRAL_REQUIREMENTS, the responses should arrive within ${setSpectralReqTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.setCursor.fileId, + assertItem.setCursor.point.x, + assertItem.setCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.setSpatialReq); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq.tiles.length + 2); + + msgController.setSpectralRequirements(assertItem.setSpectralRequirements); + let SpectralProfileDataStreamPromise = new Promise((resolve) => { + msgController.spectralProfileStream.subscribe({ + next: (data) => { + if (data.progress === 1) { + resolve(data); + } + }, + }); + }); + let SpectralProfileDataResponse = + (await SpectralProfileDataStreamPromise) as CARTA.SpectralProfileData; + expect(SpectralProfileDataResponse.progress).toEqual(1); + }, + setSpectralReqTimeout + ); let FileId: number[] = []; let regionHistogramDataArray = []; let momentResponse: any; let regionHistogramDataResponse: any; describe(`Moment generator`, () => { - test(`(Step 3)"${assertItem.openFile[0].file}": Receive a series of moment progress within ${momentTimeout}ms`, async () => { - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - regionHistogramDataArray.push(data) - resolve(regionHistogramDataArray) - } - }) - }); - momentResponse = await msgController.requestMoment(assertItem.momentRequest); - regionHistogramDataResponse = await regionHistogramDataPromise; - FileId = regionHistogramDataResponse.map(data => data.fileId); - }, momentTimeout); - - test(`Receive ${assertItem.momentRequest.moments.length} REGION_HISTOGRAM_DATA`,()=>{ + test( + `(Step 3)"${assertItem.openFile[0].file}": Receive a series of moment progress within ${momentTimeout}ms`, + async () => { + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + regionHistogramDataArray.push(data); + resolve(regionHistogramDataArray); + }, + }); + }); + momentResponse = await msgController.requestMoment(assertItem.momentRequest); + regionHistogramDataResponse = await regionHistogramDataPromise; + FileId = regionHistogramDataResponse.map((data) => data.fileId); + }, + momentTimeout + ); + + test(`Receive ${assertItem.momentRequest.moments.length} REGION_HISTOGRAM_DATA`, () => { expect(FileId.length).toEqual(assertItem.momentRequest.moments.length); }); - test(`Assert MomentResponse.success = true`,()=>{ + test(`Assert MomentResponse.success = true`, () => { expect(momentResponse.success).toBe(true); }); - test(`Assert MomentResponse.openFileAcks.length = ${assertItem.momentRequest.moments.length}`,()=>{ + test(`Assert MomentResponse.openFileAcks.length = ${assertItem.momentRequest.moments.length}`, () => { expect(momentResponse.openFileAcks.length).toEqual(assertItem.momentRequest.moments.length); }); - test(`Assert all MomentResponse.openFileAcks[].success = true`,()=>{ - momentResponse.openFileAcks.map(ack => { + test(`Assert all MomentResponse.openFileAcks[].success = true`, () => { + momentResponse.openFileAcks.map((ack) => { expect(ack.success).toBe(true); }); }); - test(`Assert all openFileAcks[].fileId > 0`,()=>{ - momentResponse.openFileAcks.map(ack => { + test(`Assert all openFileAcks[].fileId > 0`, () => { + momentResponse.openFileAcks.map((ack) => { expect(ack.fileId).toBeGreaterThan(0); }); }); - test(`Assert openFileAcks[].fileInfo.name`,()=>{ - momentResponse.openFileAcks.map((ack,index)=>{ - expect(ack.fileInfo.name).toEqual(assertItem.openFile[0].file + ".moment." + momentName[index]) + test(`Assert openFileAcks[].fileInfo.name`, () => { + momentResponse.openFileAcks.map((ack, index) => { + expect(ack.fileInfo.name).toEqual(assertItem.openFile[0].file + '.moment.' + momentName[index]); }); }); - }); - }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_MOMENTS_HDF5.test.ts b/src/performance/PERF_MOMENTS_HDF5.test.ts index d197c00..6091cd2 100644 --- a/src/performance/PERF_MOMENTS_HDF5.test.ts +++ b/src/performance/PERF_MOMENTS_HDF5.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl = config.serverURL0; let testSubdirectory = config.path.performance; @@ -18,18 +18,18 @@ interface AssertItem { setSpatialReq: CARTA.ISetSpatialRequirements; setSpectralRequirements: CARTA.ISetSpectralRequirements; momentRequest: CARTA.IMomentRequest; -}; +} let assertItem: AssertItem = { precisionDigit: 4, openFile: [ - { - directory: testSubdirectory, - file: "S255_IR_sci.spw25.cube.I.pbcor.hdf5", - hdu: "0", - fileId: 0, - renderMode: CARTA.RenderMode.RASTER, - }, + { + directory: testSubdirectory, + file: 'S255_IR_sci.spw25.cube.I.pbcor.hdf5', + hdu: '0', + fileId: 0, + renderMode: CARTA.RenderMode.RASTER, + }, ], addTilesReq: { fileId: 0, @@ -44,12 +44,15 @@ let assertItem: AssertItem = { setSpatialReq: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip: 1}, {coordinate:"y", mip: 1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, setSpectralRequirements: { fileId: 0, regionId: 0, - spectralProfiles: [{ coordinate: "z", statsTypes: [CARTA.StatsType.Sum] }], + spectralProfiles: [{ coordinate: 'z', statsTypes: [CARTA.StatsType.Sum] }], }, momentRequest: { fileId: 0, @@ -63,120 +66,148 @@ let assertItem: AssertItem = { }, }; const momentName = [ - "average", "integrated", "weighted_coord", "weighted_dispersion_coord", - "median", "median_coord", "standard_deviation", "rms", "abs_mean_dev", - "maximum", "maximum_coord", "minimum", "minimum_coord", + 'average', + 'integrated', + 'weighted_coord', + 'weighted_dispersion_coord', + 'median', + 'median_coord', + 'standard_deviation', + 'rms', + 'abs_mean_dev', + 'maximum', + 'maximum_coord', + 'minimum', + 'minimum_coord', ]; -const intensity = [ // Testing intensity at the (5, 5) of each moment image - 0.86652, 2.27450, 302.11578, 31.72338, - 0.91866, 305.16903, 0.18203, 0.88238, 0.09988, - 0.95470, 305.16903, 0.67406, 251.49975, +const intensity = [ + // Testing intensity at the (5, 5) of each moment image + 0.86652, 2.2745, 302.11578, 31.72338, 0.91866, 305.16903, 0.18203, 0.88238, 0.09988, 0.9547, 305.16903, 0.67406, + 251.49975, ]; let basepath: string; -describe("PERF_MOMENT_GENERATOR",()=>{ +describe('PERF_MOMENT_GENERATOR', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.openFile[0].directory = basepath + "/" + assertItem.openFile[0].directory; + assertItem.openFile[0].directory = basepath + '/' + assertItem.openFile[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.openFile[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.openFile[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 2)"${assertItem.openFile[0].file}" Set SET_SPECTRAL_REQUIREMENTS, the responses should arrive within ${setSpectralReqTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.setCursor.fileId, assertItem.setCursor.point.x, assertItem.setCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.setSpatialReq); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq.tiles.length + 2); - - msgController.setSpectralRequirements(assertItem.setSpectralRequirements); - let SpectralProfileDataStreamPromise = new Promise((resolve) => { - msgController.spectralProfileStream.subscribe({ - next: (data) => { - if (data.progress === 1) { - resolve(data) - } - } - }) - }) - let SpectralProfileDataResponse = await SpectralProfileDataStreamPromise as CARTA.SpectralProfileData; - expect(SpectralProfileDataResponse.progress).toEqual(1); - }, setSpectralReqTimeout); + test( + `(Step 1)"${assertItem.openFile[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.openFile[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 2)"${assertItem.openFile[0].file}" Set SET_SPECTRAL_REQUIREMENTS, the responses should arrive within ${setSpectralReqTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.setCursor.fileId, + assertItem.setCursor.point.x, + assertItem.setCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.setSpatialReq); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq.tiles.length + 2); + + msgController.setSpectralRequirements(assertItem.setSpectralRequirements); + let SpectralProfileDataStreamPromise = new Promise((resolve) => { + msgController.spectralProfileStream.subscribe({ + next: (data) => { + if (data.progress === 1) { + resolve(data); + } + }, + }); + }); + let SpectralProfileDataResponse = + (await SpectralProfileDataStreamPromise) as CARTA.SpectralProfileData; + expect(SpectralProfileDataResponse.progress).toEqual(1); + }, + setSpectralReqTimeout + ); let FileId: number[] = []; let regionHistogramDataArray = []; let momentResponse: any; let regionHistogramDataResponse: any; describe(`Moment generator`, () => { - test(`(Step 3)"${assertItem.openFile[0].file}": Receive a series of moment progress within ${momentTimeout}ms`, async () => { - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - regionHistogramDataArray.push(data) - resolve(regionHistogramDataArray) - } - }) - }); - momentResponse = await msgController.requestMoment(assertItem.momentRequest); - regionHistogramDataResponse = await regionHistogramDataPromise; - FileId = regionHistogramDataResponse.map(data => data.fileId); - }, momentTimeout); - - test(`Receive ${assertItem.momentRequest.moments.length} REGION_HISTOGRAM_DATA`,()=>{ + test( + `(Step 3)"${assertItem.openFile[0].file}": Receive a series of moment progress within ${momentTimeout}ms`, + async () => { + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + regionHistogramDataArray.push(data); + resolve(regionHistogramDataArray); + }, + }); + }); + momentResponse = await msgController.requestMoment(assertItem.momentRequest); + regionHistogramDataResponse = await regionHistogramDataPromise; + FileId = regionHistogramDataResponse.map((data) => data.fileId); + }, + momentTimeout + ); + + test(`Receive ${assertItem.momentRequest.moments.length} REGION_HISTOGRAM_DATA`, () => { expect(FileId.length).toEqual(assertItem.momentRequest.moments.length); }); - test(`Assert MomentResponse.success = true`,()=>{ + test(`Assert MomentResponse.success = true`, () => { expect(momentResponse.success).toBe(true); }); - test(`Assert MomentResponse.openFileAcks.length = ${assertItem.momentRequest.moments.length}`,()=>{ + test(`Assert MomentResponse.openFileAcks.length = ${assertItem.momentRequest.moments.length}`, () => { expect(momentResponse.openFileAcks.length).toEqual(assertItem.momentRequest.moments.length); }); - test(`Assert all MomentResponse.openFileAcks[].success = true`,()=>{ - momentResponse.openFileAcks.map(ack => { + test(`Assert all MomentResponse.openFileAcks[].success = true`, () => { + momentResponse.openFileAcks.map((ack) => { expect(ack.success).toBe(true); }); }); - test(`Assert all openFileAcks[].fileId > 0`,()=>{ - momentResponse.openFileAcks.map(ack => { + test(`Assert all openFileAcks[].fileId > 0`, () => { + momentResponse.openFileAcks.map((ack) => { expect(ack.fileId).toBeGreaterThan(0); }); }); - test(`Assert openFileAcks[].fileInfo.name`,()=>{ - momentResponse.openFileAcks.map((ack,index)=>{ - expect(ack.fileInfo.name).toEqual(assertItem.openFile[0].file + ".moment." + momentName[index]) + test(`Assert openFileAcks[].fileInfo.name`, () => { + momentResponse.openFileAcks.map((ack, index) => { + expect(ack.fileInfo.name).toEqual(assertItem.openFile[0].file + '.moment.' + momentName[index]); }); }); - }); - }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_PV_CASA.test.ts b/src/performance/PERF_PV_CASA.test.ts index 7575534..877a612 100644 --- a/src/performance/PERF_PV_CASA.test.ts +++ b/src/performance/PERF_PV_CASA.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -16,13 +16,13 @@ interface AssertItem { setSpatialReq: CARTA.ISetSpatialRequirements[]; setRegion: CARTA.ISetRegion[]; setPVRequest: CARTA.IPvRequest; -}; +} let assertItem: AssertItem = { openFile: { directory: testSubdirectory, - file: "cube_B_06400_z00100.image", - hdu: "0", + file: 'cube_B_06400_z00100.image', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -37,7 +37,10 @@ let assertItem: AssertItem = { fileId: 1, compressionQuality: 11, compressionType: CARTA.CompressionType.ZFP, - tiles: [67108870, 67108869, 67108871, 67108868, 67108872, 67108867, 67108873, 67108866, 67108874, 67108865, 67108875, 67108864, 67108876], + tiles: [ + 67108870, 67108869, 67108871, 67108868, 67108872, 67108867, 67108873, 67108866, 67108874, 67108865, + 67108875, 67108864, 67108876, + ], }, ], setCursor: [ @@ -54,12 +57,18 @@ let assertItem: AssertItem = { { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip:1}, {coordinate:"y", mip:1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, { fileId: 1, regionId: 0, - spatialProfiles: [{coordinate:"x", mip:1}, {coordinate:"y", mip:1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, ], setRegion: [ @@ -68,102 +77,127 @@ let assertItem: AssertItem = { regionId: -1, regionInfo: { regionType: CARTA.RegionType.LINE, - controlPoints: [{ x: 3719.17546581019, y: 3663.715601206708 }, { x: 5897.900936510895, y: 5842.441071907413 }], + controlPoints: [ + { x: 3719.17546581019, y: 3663.715601206708 }, + { x: 5897.900936510895, y: 5842.441071907413 }, + ], rotation: 135, - } + }, }, ], setPVRequest: { - fileId:0, - regionId:1, - width:3, + fileId: 0, + regionId: 1, + width: 3, }, }; let basepath: string; -describe("PERF_PV",()=>{ +describe('PERF_PV', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.openFile.directory = basepath + "/" + assertItem.openFile.directory; + assertItem.openFile.directory = basepath + '/' + assertItem.openFile.directory; }); describe(`Initialization: open the image`, () => { - test(`(step 1): Open File`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.openFile); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(step 2): set cursor and add required tiles`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq[0]); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[0].tiles.length + 2); - - msgController.setCursor(assertItem.setCursor[0].fileId, assertItem.setCursor[0].point.x, assertItem.setCursor[0].point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq[0].tiles.length + 2); - }, openFileTimeout); - - test(`(step 3): set SET_SPATIAL_REQUIREMENTS`, async()=>{ + test( + `(step 1): Open File`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(step 2): set cursor and add required tiles`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq[0]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq[0].tiles.length + 2 + ); + + msgController.setCursor( + assertItem.setCursor[0].fileId, + assertItem.setCursor[0].point.x, + assertItem.setCursor[0].point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq[0].tiles.length + 2); + }, + openFileTimeout + ); + + test(`(step 3): set SET_SPATIAL_REQUIREMENTS`, async () => { msgController.setSpatialRequirements(assertItem.setSpatialReq[0]); let SpatialProfileDataResponse = await Stream(CARTA.SpatialProfileData, 1); }); - test(`(Step 4): set SET_REGION`,async()=>{ - let setRegionAckResponse = await msgController.setRegion(assertItem.setRegion[0].fileId, assertItem.setRegion[0].regionId, assertItem.setRegion[0].regionInfo); + test(`(Step 4): set SET_REGION`, async () => { + let setRegionAckResponse = await msgController.setRegion( + assertItem.setRegion[0].fileId, + assertItem.setRegion[0].regionId, + assertItem.setRegion[0].regionInfo + ); expect(setRegionAckResponse.regionId).toEqual(1); expect(setRegionAckResponse.success).toEqual(true); }); let regionHistogramData = []; let pvProgressData = []; - test(`(Step 5): PV Response should arrived within ${PVTimeout} ms`, async()=>{ - let pvProgressPromise = new Promise((resolve)=>{ - msgController.pvProgressStream.subscribe({ - next: (data) => { - pvProgressData.push(data) - if (data.progress == 1) { - resolve(pvProgressData) - } - } - }) - }); - - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - regionHistogramData.push(data) - resolve(regionHistogramData) - } - }) - }); - let PVresponse = await msgController.requestPV(assertItem.setPVRequest); - let pvProgressResponse = await pvProgressPromise; - expect(pvProgressResponse[pvProgressResponse.length - 1].progress).toEqual(1); - let regionHistogramDataResponse = await regionHistogramDataPromise; - expect(PVresponse.success).toBe(true); - expect(regionHistogramDataResponse.length).toBe(1); - }, PVTimeout); - - test(`(Step 6): request ${assertItem.addTilesReq[1].tiles.length} tiles after PV response`, async()=>{ + test( + `(Step 5): PV Response should arrived within ${PVTimeout} ms`, + async () => { + let pvProgressPromise = new Promise((resolve) => { + msgController.pvProgressStream.subscribe({ + next: (data) => { + pvProgressData.push(data); + if (data.progress == 1) { + resolve(pvProgressData); + } + }, + }); + }); + + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + regionHistogramData.push(data); + resolve(regionHistogramData); + }, + }); + }); + let PVresponse = await msgController.requestPV(assertItem.setPVRequest); + let pvProgressResponse = await pvProgressPromise; + expect(pvProgressResponse[pvProgressResponse.length - 1].progress).toEqual(1); + let regionHistogramDataResponse = await regionHistogramDataPromise; + expect(PVresponse.success).toBe(true); + expect(regionHistogramDataResponse.length).toBe(1); + }, + PVTimeout + ); + + test(`(Step 6): request ${assertItem.addTilesReq[1].tiles.length} tiles after PV response`, async () => { msgController.addRequiredTiles(assertItem.addTilesReq[1]); - let TilesResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[1].tiles.length + 2); + let TilesResponse = await Stream(CARTA.RasterTileData, assertItem.addTilesReq[1].tiles.length + 2); expect(TilesResponse.length).toEqual(assertItem.addTilesReq[1].tiles.length + 2); }); - }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_PV_FITS.test.ts b/src/performance/PERF_PV_FITS.test.ts index 8f6660f..bb43cd5 100644 --- a/src/performance/PERF_PV_FITS.test.ts +++ b/src/performance/PERF_PV_FITS.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -16,13 +16,13 @@ interface AssertItem { setSpatialReq: CARTA.ISetSpatialRequirements[]; setRegion: CARTA.ISetRegion[]; setPVRequest: CARTA.IPvRequest; -}; +} let assertItem: AssertItem = { openFile: { directory: testSubdirectory, - file: "cube_B_06400_z00100.fits", - hdu: "0", + file: 'cube_B_06400_z00100.fits', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -37,7 +37,10 @@ let assertItem: AssertItem = { fileId: 1, compressionQuality: 11, compressionType: CARTA.CompressionType.ZFP, - tiles: [67108870, 67108869, 67108871, 67108868, 67108872, 67108867, 67108873, 67108866, 67108874, 67108865, 67108875, 67108864, 67108876], + tiles: [ + 67108870, 67108869, 67108871, 67108868, 67108872, 67108867, 67108873, 67108866, 67108874, 67108865, + 67108875, 67108864, 67108876, + ], }, ], setCursor: [ @@ -54,12 +57,18 @@ let assertItem: AssertItem = { { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip:1}, {coordinate:"y", mip:1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, { fileId: 1, regionId: 0, - spatialProfiles: [{coordinate:"x", mip:1}, {coordinate:"y", mip:1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, ], setRegion: [ @@ -68,102 +77,127 @@ let assertItem: AssertItem = { regionId: -1, regionInfo: { regionType: CARTA.RegionType.LINE, - controlPoints: [{ x: 3719.17546581019, y: 3663.715601206708 }, { x: 5897.900936510895, y: 5842.441071907413 }], + controlPoints: [ + { x: 3719.17546581019, y: 3663.715601206708 }, + { x: 5897.900936510895, y: 5842.441071907413 }, + ], rotation: 135, - } + }, }, ], setPVRequest: { - fileId:0, - regionId:1, - width:3, + fileId: 0, + regionId: 1, + width: 3, }, }; let basepath: string; -describe("PERF_PV",()=>{ +describe('PERF_PV', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.openFile.directory = basepath + "/" + assertItem.openFile.directory; + assertItem.openFile.directory = basepath + '/' + assertItem.openFile.directory; }); describe(`Initialization: open the image`, () => { - test(`(step 1): Open File`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.openFile); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(step 2): set cursor and add required tiles`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq[0]); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[0].tiles.length + 2); - - msgController.setCursor(assertItem.setCursor[0].fileId, assertItem.setCursor[0].point.x, assertItem.setCursor[0].point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq[0].tiles.length + 2); - }, openFileTimeout); - - test(`(step 3): set SET_SPATIAL_REQUIREMENTS`, async()=>{ + test( + `(step 1): Open File`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(step 2): set cursor and add required tiles`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq[0]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq[0].tiles.length + 2 + ); + + msgController.setCursor( + assertItem.setCursor[0].fileId, + assertItem.setCursor[0].point.x, + assertItem.setCursor[0].point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq[0].tiles.length + 2); + }, + openFileTimeout + ); + + test(`(step 3): set SET_SPATIAL_REQUIREMENTS`, async () => { msgController.setSpatialRequirements(assertItem.setSpatialReq[0]); let SpatialProfileDataResponse = await Stream(CARTA.SpatialProfileData, 1); }); - test(`(Step 4): set SET_REGION`,async()=>{ - let setRegionAckResponse = await msgController.setRegion(assertItem.setRegion[0].fileId, assertItem.setRegion[0].regionId, assertItem.setRegion[0].regionInfo); + test(`(Step 4): set SET_REGION`, async () => { + let setRegionAckResponse = await msgController.setRegion( + assertItem.setRegion[0].fileId, + assertItem.setRegion[0].regionId, + assertItem.setRegion[0].regionInfo + ); expect(setRegionAckResponse.regionId).toEqual(1); expect(setRegionAckResponse.success).toEqual(true); }); let regionHistogramData = []; let pvProgressData = []; - test(`(Step 5): PV Response should arrived within ${PVTimeout} ms`, async()=>{ - let pvProgressPromise = new Promise((resolve)=>{ - msgController.pvProgressStream.subscribe({ - next: (data) => { - pvProgressData.push(data) - if (data.progress == 1) { - resolve(pvProgressData) - } - } - }) - }); - - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - regionHistogramData.push(data) - resolve(regionHistogramData) - } - }) - }); - let PVresponse = await msgController.requestPV(assertItem.setPVRequest); - let pvProgressResponse = await pvProgressPromise; - expect(pvProgressResponse[pvProgressResponse.length - 1].progress).toEqual(1); - let regionHistogramDataResponse = await regionHistogramDataPromise; - expect(PVresponse.success).toBe(true); - expect(regionHistogramDataResponse.length).toBe(1); - }, PVTimeout); - - test(`(Step 6): request ${assertItem.addTilesReq[1].tiles.length} tiles after PV response`, async()=>{ + test( + `(Step 5): PV Response should arrived within ${PVTimeout} ms`, + async () => { + let pvProgressPromise = new Promise((resolve) => { + msgController.pvProgressStream.subscribe({ + next: (data) => { + pvProgressData.push(data); + if (data.progress == 1) { + resolve(pvProgressData); + } + }, + }); + }); + + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + regionHistogramData.push(data); + resolve(regionHistogramData); + }, + }); + }); + let PVresponse = await msgController.requestPV(assertItem.setPVRequest); + let pvProgressResponse = await pvProgressPromise; + expect(pvProgressResponse[pvProgressResponse.length - 1].progress).toEqual(1); + let regionHistogramDataResponse = await regionHistogramDataPromise; + expect(PVresponse.success).toBe(true); + expect(regionHistogramDataResponse.length).toBe(1); + }, + PVTimeout + ); + + test(`(Step 6): request ${assertItem.addTilesReq[1].tiles.length} tiles after PV response`, async () => { msgController.addRequiredTiles(assertItem.addTilesReq[1]); - let TilesResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[1].tiles.length + 2); + let TilesResponse = await Stream(CARTA.RasterTileData, assertItem.addTilesReq[1].tiles.length + 2); expect(TilesResponse.length).toEqual(assertItem.addTilesReq[1].tiles.length + 2); }); - }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_PV_HDF5.test.ts b/src/performance/PERF_PV_HDF5.test.ts index 3032683..dd7f718 100644 --- a/src/performance/PERF_PV_HDF5.test.ts +++ b/src/performance/PERF_PV_HDF5.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -16,13 +16,13 @@ interface AssertItem { setSpatialReq: CARTA.ISetSpatialRequirements[]; setRegion: CARTA.ISetRegion[]; setPVRequest: CARTA.IPvRequest; -}; +} let assertItem: AssertItem = { openFile: { directory: testSubdirectory, - file: "cube_B_06400_z00100.hdf5", - hdu: "0", + file: 'cube_B_06400_z00100.hdf5', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -37,7 +37,10 @@ let assertItem: AssertItem = { fileId: 1, compressionQuality: 11, compressionType: CARTA.CompressionType.ZFP, - tiles: [67108870, 67108869, 67108871, 67108868, 67108872, 67108867, 67108873, 67108866, 67108874, 67108865, 67108875, 67108864, 67108876], + tiles: [ + 67108870, 67108869, 67108871, 67108868, 67108872, 67108867, 67108873, 67108866, 67108874, 67108865, + 67108875, 67108864, 67108876, + ], }, ], setCursor: [ @@ -54,12 +57,18 @@ let assertItem: AssertItem = { { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip:1}, {coordinate:"y", mip:1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, { fileId: 1, regionId: 0, - spatialProfiles: [{coordinate:"x", mip:1}, {coordinate:"y", mip:1}] + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, ], setRegion: [ @@ -68,102 +77,127 @@ let assertItem: AssertItem = { regionId: -1, regionInfo: { regionType: CARTA.RegionType.LINE, - controlPoints: [{ x: 3719.17546581019, y: 3663.715601206708 }, { x: 5897.900936510895, y: 5842.441071907413 }], + controlPoints: [ + { x: 3719.17546581019, y: 3663.715601206708 }, + { x: 5897.900936510895, y: 5842.441071907413 }, + ], rotation: 135, - } + }, }, ], setPVRequest: { - fileId:0, - regionId:1, - width:3, + fileId: 0, + regionId: 1, + width: 3, }, }; let basepath: string; -describe("PERF_PV",()=>{ +describe('PERF_PV', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.openFile.directory = basepath + "/" + assertItem.openFile.directory; + assertItem.openFile.directory = basepath + '/' + assertItem.openFile.directory; }); describe(`Initialization: open the image`, () => { - test(`(step 1): Open File`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.openFile); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(step 2): set cursor and add required tiles`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq[0]); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[0].tiles.length + 2); - - msgController.setCursor(assertItem.setCursor[0].fileId, assertItem.setCursor[0].point.x, assertItem.setCursor[0].point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq[0].tiles.length + 2); - }, openFileTimeout); - - test(`(step 3): set SET_SPATIAL_REQUIREMENTS`, async()=>{ + test( + `(step 1): Open File`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.openFile); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(step 2): set cursor and add required tiles`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq[0]); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq[0].tiles.length + 2 + ); + + msgController.setCursor( + assertItem.setCursor[0].fileId, + assertItem.setCursor[0].point.x, + assertItem.setCursor[0].point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.addTilesReq[0].tiles.length + 2); + }, + openFileTimeout + ); + + test(`(step 3): set SET_SPATIAL_REQUIREMENTS`, async () => { msgController.setSpatialRequirements(assertItem.setSpatialReq[0]); let SpatialProfileDataResponse = await Stream(CARTA.SpatialProfileData, 1); }); - test(`(Step 4): set SET_REGION`,async()=>{ - let setRegionAckResponse = await msgController.setRegion(assertItem.setRegion[0].fileId, assertItem.setRegion[0].regionId, assertItem.setRegion[0].regionInfo); + test(`(Step 4): set SET_REGION`, async () => { + let setRegionAckResponse = await msgController.setRegion( + assertItem.setRegion[0].fileId, + assertItem.setRegion[0].regionId, + assertItem.setRegion[0].regionInfo + ); expect(setRegionAckResponse.regionId).toEqual(1); expect(setRegionAckResponse.success).toEqual(true); }); let regionHistogramData = []; let pvProgressData = []; - test(`(Step 5): PV Response should arrived within ${PVTimeout} ms`, async()=>{ - let pvProgressPromise = new Promise((resolve)=>{ - msgController.pvProgressStream.subscribe({ - next: (data) => { - pvProgressData.push(data) - if (data.progress == 1) { - resolve(pvProgressData) - } - } - }) - }); - - let regionHistogramDataPromise = new Promise((resolve)=>{ - msgController.histogramStream.subscribe({ - next: (data) => { - regionHistogramData.push(data) - resolve(regionHistogramData) - } - }) - }); - let PVresponse = await msgController.requestPV(assertItem.setPVRequest); - let pvProgressResponse = await pvProgressPromise; - expect(pvProgressResponse[pvProgressResponse.length - 1].progress).toEqual(1); - let regionHistogramDataResponse = await regionHistogramDataPromise; - expect(PVresponse.success).toBe(true); - expect(regionHistogramDataResponse.length).toBe(1); - }, PVTimeout); - - test(`(Step 6): request ${assertItem.addTilesReq[1].tiles.length} tiles after PV response`, async()=>{ + test( + `(Step 5): PV Response should arrived within ${PVTimeout} ms`, + async () => { + let pvProgressPromise = new Promise((resolve) => { + msgController.pvProgressStream.subscribe({ + next: (data) => { + pvProgressData.push(data); + if (data.progress == 1) { + resolve(pvProgressData); + } + }, + }); + }); + + let regionHistogramDataPromise = new Promise((resolve) => { + msgController.histogramStream.subscribe({ + next: (data) => { + regionHistogramData.push(data); + resolve(regionHistogramData); + }, + }); + }); + let PVresponse = await msgController.requestPV(assertItem.setPVRequest); + let pvProgressResponse = await pvProgressPromise; + expect(pvProgressResponse[pvProgressResponse.length - 1].progress).toEqual(1); + let regionHistogramDataResponse = await regionHistogramDataPromise; + expect(PVresponse.success).toBe(true); + expect(regionHistogramDataResponse.length).toBe(1); + }, + PVTimeout + ); + + test(`(Step 6): request ${assertItem.addTilesReq[1].tiles.length} tiles after PV response`, async () => { msgController.addRequiredTiles(assertItem.addTilesReq[1]); - let TilesResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[1].tiles.length + 2); + let TilesResponse = await Stream(CARTA.RasterTileData, assertItem.addTilesReq[1].tiles.length + 2); expect(TilesResponse.length).toEqual(assertItem.addTilesReq[1].tiles.length + 2); }); - }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts index 0d176e1..090fe6f 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -21,8 +21,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.image", - hdu: "0", + file: 'cube_B_06400_z00100.image', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -32,7 +32,14 @@ let assertItem: AssertItem = { fileId: 0, compressionQuality: 11, compressionType: CARTA.CompressionType.ZFP, - tiles: [67125252, 67129348, 67125253, 67129349, 67125251, 67121156, 67129347, 67121157, 67121155, 67133444, 67125254, 67133445, 67129350, 67133443, 67121158, 67125250, 67117060, 67129346, 67117061, 67121154, 67117059, 67133446, 67137540, 67125255, 67133442, 67117062, 67137541, 67129351, 67137539, 67121159, 67117058, 67125249, 67129345, 67137542, 67133447, 67121153, 67137538, 67117063, 67133441, 67125256, 67117057, 67129352, 67137543, 67121160, 67125248, 67133448, 67137537, 67129344, 67121152, 67117064, 67133440, 67117056, 67137544, 67137536], + tiles: [ + 67125252, 67129348, 67125253, 67129349, 67125251, 67121156, 67129347, 67121157, 67121155, 67133444, + 67125254, 67133445, 67129350, 67133443, 67121158, 67125250, 67117060, 67129346, 67117061, 67121154, + 67117059, 67133446, 67137540, 67125255, 67133442, 67117062, 67137541, 67129351, 67137539, 67121159, + 67117058, 67125249, 67129345, 67137542, 67133447, 67121153, 67137538, 67117063, 67133441, 67125256, + 67117057, 67129352, 67137543, 67121160, 67125248, 67133448, 67137537, 67129344, 67121152, 67117064, + 67133440, 67117056, 67137544, 67137536, + ], }, ], initTilesReq: { @@ -45,61 +52,82 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, -} +}; let basepath: string; -describe("PERF_RASTER_TILE_DATA",()=>{ +describe('PERF_RASTER_TILE_DATA', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); - test(`(Step 2)"${assertItem.fileOpen[0].file}" RasterTileData responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq[0]); + test( + `(Step 2)"${assertItem.fileOpen[0].file}" RasterTileData responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq[0]); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[0].tiles.length + 2); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq[0].tiles.length + 2 + ); - expect(RasterTileDataResponse.length).toBe(assertItem.addTilesReq[0].tiles.length + 2) - }, readFileTimeout); + expect(RasterTileDataResponse.length).toBe(assertItem.addTilesReq[0].tiles.length + 2); + }, + readFileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}) \ No newline at end of file +}); diff --git a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts index d19a8ac..bf0fa9f 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -21,8 +21,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.fits", - hdu: "0", + file: 'cube_B_06400_z00100.fits', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -32,7 +32,14 @@ let assertItem: AssertItem = { fileId: 0, compressionQuality: 11, compressionType: CARTA.CompressionType.ZFP, - tiles: [67125252, 67129348, 67125253, 67129349, 67125251, 67121156, 67129347, 67121157, 67121155, 67133444, 67125254, 67133445, 67129350, 67133443, 67121158, 67125250, 67117060, 67129346, 67117061, 67121154, 67117059, 67133446, 67137540, 67125255, 67133442, 67117062, 67137541, 67129351, 67137539, 67121159, 67117058, 67125249, 67129345, 67137542, 67133447, 67121153, 67137538, 67117063, 67133441, 67125256, 67117057, 67129352, 67137543, 67121160, 67125248, 67133448, 67137537, 67129344, 67121152, 67117064, 67133440, 67117056, 67137544, 67137536], + tiles: [ + 67125252, 67129348, 67125253, 67129349, 67125251, 67121156, 67129347, 67121157, 67121155, 67133444, + 67125254, 67133445, 67129350, 67133443, 67121158, 67125250, 67117060, 67129346, 67117061, 67121154, + 67117059, 67133446, 67137540, 67125255, 67133442, 67117062, 67137541, 67129351, 67137539, 67121159, + 67117058, 67125249, 67129345, 67137542, 67133447, 67121153, 67137538, 67117063, 67133441, 67125256, + 67117057, 67129352, 67137543, 67121160, 67125248, 67133448, 67137537, 67129344, 67121152, 67117064, + 67133440, 67117056, 67137544, 67137536, + ], }, ], initTilesReq: { @@ -45,61 +52,82 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, -} +}; let basepath: string; -describe("PERF_RASTER_TILE_DATA",()=>{ +describe('PERF_RASTER_TILE_DATA', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); - test(`(Step 2)"${assertItem.fileOpen[0].file}" RasterTileData responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq[0]); + test( + `(Step 2)"${assertItem.fileOpen[0].file}" RasterTileData responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq[0]); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[0].tiles.length + 2); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq[0].tiles.length + 2 + ); - expect(RasterTileDataResponse.length).toBe(assertItem.addTilesReq[0].tiles.length + 2) - }, readFileTimeout); + expect(RasterTileDataResponse.length).toBe(assertItem.addTilesReq[0].tiles.length + 2); + }, + readFileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}) \ No newline at end of file +}); diff --git a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts index 3e6c6c8..4bbf056 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -21,8 +21,8 @@ let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_06400_z00100.hdf5", - hdu: "0", + file: 'cube_B_06400_z00100.hdf5', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -32,7 +32,14 @@ let assertItem: AssertItem = { fileId: 0, compressionQuality: 11, compressionType: CARTA.CompressionType.ZFP, - tiles: [67125252, 67129348, 67125253, 67129349, 67125251, 67121156, 67129347, 67121157, 67121155, 67133444, 67125254, 67133445, 67129350, 67133443, 67121158, 67125250, 67117060, 67129346, 67117061, 67121154, 67117059, 67133446, 67137540, 67125255, 67133442, 67117062, 67137541, 67129351, 67137539, 67121159, 67117058, 67125249, 67129345, 67137542, 67133447, 67121153, 67137538, 67117063, 67133441, 67125256, 67117057, 67129352, 67137543, 67121160, 67125248, 67133448, 67137537, 67129344, 67121152, 67117064, 67133440, 67117056, 67137544, 67137536], + tiles: [ + 67125252, 67129348, 67125253, 67129349, 67125251, 67121156, 67129347, 67121157, 67121155, 67133444, + 67125254, 67133445, 67129350, 67133443, 67121158, 67125250, 67117060, 67129346, 67117061, 67121154, + 67117059, 67133446, 67137540, 67125255, 67133442, 67117062, 67137541, 67129351, 67137539, 67121159, + 67117058, 67125249, 67129345, 67137542, 67133447, 67121153, 67137538, 67117063, 67133441, 67125256, + 67117057, 67129352, 67137543, 67121160, 67125248, 67133448, 67137537, 67129344, 67121152, 67117064, + 67133440, 67117056, 67137544, 67137536, + ], }, ], initTilesReq: { @@ -45,61 +52,82 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x"}, {coordinate:"y"}], + spatialProfiles: [{ coordinate: 'x' }, { coordinate: 'y' }], }, -} +}; let basepath: string; -describe("PERF_RASTER_TILE_DATA",()=>{ +describe('PERF_RASTER_TILE_DATA', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); - test(`(Step 2)"${assertItem.fileOpen[0].file}" RasterTileData responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.addTilesReq[0]); + test( + `(Step 2)"${assertItem.fileOpen[0].file}" RasterTileData responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.addTilesReq[0]); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.addTilesReq[0].tiles.length + 2); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.addTilesReq[0].tiles.length + 2 + ); - expect(RasterTileDataResponse.length).toBe(assertItem.addTilesReq[0].tiles.length + 2) - }, readFileTimeout); + expect(RasterTileDataResponse.length).toBe(assertItem.addTilesReq[0].tiles.length + 2); + }, + readFileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}) \ No newline at end of file +}); diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts index 7848107..239df2a 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -18,14 +18,14 @@ interface AssertItem { initSpatialRequirements: CARTA.ISetSpatialRequirements; setRegion: CARTA.ISetRegion[]; setSpectralRequirements: CARTA.ISetSpectralRequirements[]; -}; +} let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_03200_z01000.image", - hdu: "0", + file: 'cube_B_03200_z01000.image', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -40,94 +40,125 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip: 1}, {coordinate:"y", mip: 1}], + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, setRegion: [ { fileId: 0, regionId: -1, regionInfo: { - controlPoints: [{ x: 800, y: 800 }, { x: 400, y: 400 }], + controlPoints: [ + { x: 800, y: 800 }, + { x: 400, y: 400 }, + ], rotation: 0, regionType: 3, - }, }, ], setSpectralRequirements: [ { - spectralProfiles: [{ coordinate: "z", statsTypes: [4] },], + spectralProfiles: [{ coordinate: 'z', statsTypes: [4] }], regionId: 1, fileId: 0, }, ], -} +}; let basepath: string; -describe("PERF_LOAD_IMAGE",()=>{ +describe('PERF_LOAD_IMAGE', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - test(`(Step 2)"${assertItem.fileOpen[0].file}" SET_REGION_ACK should arrive within ${readRegionTimeout} ms`, async () => { - let setRegionAckResponse = await msgController.setRegion(assertItem.setRegion[0].fileId, assertItem.setRegion[0].regionId, assertItem.setRegion[0].regionInfo); - expect(setRegionAckResponse.regionId).toEqual(1); - expect(setRegionAckResponse.success).toEqual(true); - }, readRegionTimeout); - - test(`(Step 3)"${assertItem.fileOpen[0].file}" SPECTRAL_PROFILE_DATA stream should arrive within ${spectralProfileTimeout} ms`, async () => { - msgController.setSpectralRequirements(assertItem.setSpectralRequirements[0]); - let SpectralProfileDataStreamPromise = new Promise((resolve) => { - msgController.spectralProfileStream.subscribe({ - next: (data) => { - if (data.progress === 1) { - resolve(data) - } - } - }) - }) - let SpectralProfileDataResponse = await SpectralProfileDataStreamPromise as CARTA.SpectralProfileData; - expect(SpectralProfileDataResponse.progress).toEqual(1); - }, spectralProfileTimeout); - + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); + + test( + `(Step 2)"${assertItem.fileOpen[0].file}" SET_REGION_ACK should arrive within ${readRegionTimeout} ms`, + async () => { + let setRegionAckResponse = await msgController.setRegion( + assertItem.setRegion[0].fileId, + assertItem.setRegion[0].regionId, + assertItem.setRegion[0].regionInfo + ); + expect(setRegionAckResponse.regionId).toEqual(1); + expect(setRegionAckResponse.success).toEqual(true); + }, + readRegionTimeout + ); + + test( + `(Step 3)"${assertItem.fileOpen[0].file}" SPECTRAL_PROFILE_DATA stream should arrive within ${spectralProfileTimeout} ms`, + async () => { + msgController.setSpectralRequirements(assertItem.setSpectralRequirements[0]); + let SpectralProfileDataStreamPromise = new Promise((resolve) => { + msgController.spectralProfileStream.subscribe({ + next: (data) => { + if (data.progress === 1) { + resolve(data); + } + }, + }); + }); + let SpectralProfileDataResponse = + (await SpectralProfileDataStreamPromise) as CARTA.SpectralProfileData; + expect(SpectralProfileDataResponse.progress).toEqual(1); + }, + spectralProfileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts index 620c9a7..68ddd28 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -18,14 +18,14 @@ interface AssertItem { initSpatialRequirements: CARTA.ISetSpatialRequirements; setRegion: CARTA.ISetRegion[]; setSpectralRequirements: CARTA.ISetSpectralRequirements[]; -}; +} let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_03200_z01000.fits", - hdu: "0", + file: 'cube_B_03200_z01000.fits', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -40,94 +40,125 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip: 1}, {coordinate:"y", mip: 1}], + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, setRegion: [ { fileId: 0, regionId: -1, regionInfo: { - controlPoints: [{ x: 800, y: 800 }, { x: 400, y: 400 }], + controlPoints: [ + { x: 800, y: 800 }, + { x: 400, y: 400 }, + ], rotation: 0, regionType: 3, - }, }, ], setSpectralRequirements: [ { - spectralProfiles: [{ coordinate: "z", statsTypes: [4] },], + spectralProfiles: [{ coordinate: 'z', statsTypes: [4] }], regionId: 1, fileId: 0, }, ], -} +}; let basepath: string; -describe("PERF_LOAD_IMAGE",()=>{ +describe('PERF_LOAD_IMAGE', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - test(`(Step 2)"${assertItem.fileOpen[0].file}" SET_REGION_ACK should arrive within ${readRegionTimeout} ms`, async () => { - let setRegionAckResponse = await msgController.setRegion(assertItem.setRegion[0].fileId, assertItem.setRegion[0].regionId, assertItem.setRegion[0].regionInfo); - expect(setRegionAckResponse.regionId).toEqual(1); - expect(setRegionAckResponse.success).toEqual(true); - }, readRegionTimeout); - - test(`(Step 3)"${assertItem.fileOpen[0].file}" SPECTRAL_PROFILE_DATA stream should arrive within ${spectralProfileTimeout} ms`, async () => { - msgController.setSpectralRequirements(assertItem.setSpectralRequirements[0]); - let SpectralProfileDataStreamPromise = new Promise((resolve) => { - msgController.spectralProfileStream.subscribe({ - next: (data) => { - if (data.progress === 1) { - resolve(data) - } - } - }) - }) - let SpectralProfileDataResponse = await SpectralProfileDataStreamPromise as CARTA.SpectralProfileData; - expect(SpectralProfileDataResponse.progress).toEqual(1); - }, spectralProfileTimeout); - + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); + + test( + `(Step 2)"${assertItem.fileOpen[0].file}" SET_REGION_ACK should arrive within ${readRegionTimeout} ms`, + async () => { + let setRegionAckResponse = await msgController.setRegion( + assertItem.setRegion[0].fileId, + assertItem.setRegion[0].regionId, + assertItem.setRegion[0].regionInfo + ); + expect(setRegionAckResponse.regionId).toEqual(1); + expect(setRegionAckResponse.success).toEqual(true); + }, + readRegionTimeout + ); + + test( + `(Step 3)"${assertItem.fileOpen[0].file}" SPECTRAL_PROFILE_DATA stream should arrive within ${spectralProfileTimeout} ms`, + async () => { + msgController.setSpectralRequirements(assertItem.setSpectralRequirements[0]); + let SpectralProfileDataStreamPromise = new Promise((resolve) => { + msgController.spectralProfileStream.subscribe({ + next: (data) => { + if (data.progress === 1) { + resolve(data); + } + }, + }); + }); + let SpectralProfileDataResponse = + (await SpectralProfileDataStreamPromise) as CARTA.SpectralProfileData; + expect(SpectralProfileDataResponse.progress).toEqual(1); + }, + spectralProfileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts index 41e2c01..4979480 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts @@ -1,7 +1,7 @@ -import { CARTA } from "carta-protobuf"; -import { checkConnection, Stream} from './MyClient'; -import { MessageController } from "./MessageController"; -import config from "./config.json"; +import { CARTA } from 'carta-protobuf'; +import { checkConnection, Stream } from './MyClient'; +import { MessageController } from './MessageController'; +import config from './config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; @@ -18,14 +18,14 @@ interface AssertItem { initSpatialRequirements: CARTA.ISetSpatialRequirements; setRegion: CARTA.ISetRegion[]; setSpectralRequirements: CARTA.ISetSpectralRequirements[]; -}; +} let assertItem: AssertItem = { fileOpen: [ { directory: testSubdirectory, - file: "cube_B_03200_z01000.hdf5", - hdu: "0", + file: 'cube_B_03200_z01000.hdf5', + hdu: '0', fileId: 0, renderMode: CARTA.RenderMode.RASTER, }, @@ -40,94 +40,125 @@ let assertItem: AssertItem = { fileId: 0, point: { x: 1, y: 1 }, }, - initSpatialRequirements: - { + initSpatialRequirements: { fileId: 0, regionId: 0, - spatialProfiles: [{coordinate:"x", mip: 1}, {coordinate:"y", mip: 1}], + spatialProfiles: [ + { coordinate: 'x', mip: 1 }, + { coordinate: 'y', mip: 1 }, + ], }, setRegion: [ { fileId: 0, regionId: -1, regionInfo: { - controlPoints: [{ x: 800, y: 800 }, { x: 400, y: 400 }], + controlPoints: [ + { x: 800, y: 800 }, + { x: 400, y: 400 }, + ], rotation: 0, regionType: 3, - }, }, ], setSpectralRequirements: [ { - spectralProfiles: [{ coordinate: "z", statsTypes: [4] },], + spectralProfiles: [{ coordinate: 'z', statsTypes: [4] }], regionId: 1, fileId: 0, }, ], -} +}; let basepath: string; -describe("PERF_LOAD_IMAGE",()=>{ +describe('PERF_LOAD_IMAGE', () => { const msgController = MessageController.Instance; describe(`Register a session`, () => { - beforeAll(async ()=> { + beforeAll(async () => { await msgController.connect(testServerUrl); }, connectTimeout); checkConnection(); test(`Get basepath and modify the directory path`, async () => { - let fileListResponse = await msgController.getFileList("$BASE",0); + let fileListResponse = await msgController.getFileList('$BASE', 0); basepath = fileListResponse.directory; - assertItem.fileOpen[0].directory = basepath + "/" + assertItem.fileOpen[0].directory; + assertItem.fileOpen[0].directory = basepath + '/' + assertItem.fileOpen[0].directory; }); describe(`Initialization: open the image`, () => { - test(`(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, async() => { - msgController.closeFile(-1); - msgController.closeFile(0); - let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); - expect(OpenFileResponse.success).toEqual(true); - let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData,1); - }, openFileTimeout); - - test(`(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, async () => { - msgController.addRequiredTiles(assertItem.initTilesReq); - let RasterTileDataResponse = await Stream(CARTA.RasterTileData,assertItem.initTilesReq.tiles.length + 2); - - msgController.setCursor(assertItem.initSetCursor.fileId, assertItem.initSetCursor.point.x, assertItem.initSetCursor.point.y); - let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData,1); - - msgController.setSpatialRequirements(assertItem.initSpatialRequirements); - let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData,1); - - expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); - }, openFileTimeout); - - test(`(Step 2)"${assertItem.fileOpen[0].file}" SET_REGION_ACK should arrive within ${readRegionTimeout} ms`, async () => { - let setRegionAckResponse = await msgController.setRegion(assertItem.setRegion[0].fileId, assertItem.setRegion[0].regionId, assertItem.setRegion[0].regionInfo); - expect(setRegionAckResponse.regionId).toEqual(1); - expect(setRegionAckResponse.success).toEqual(true); - }, readRegionTimeout); - - test(`(Step 3)"${assertItem.fileOpen[0].file}" SPECTRAL_PROFILE_DATA stream should arrive within ${spectralProfileTimeout} ms`, async () => { - msgController.setSpectralRequirements(assertItem.setSpectralRequirements[0]); - let SpectralProfileDataStreamPromise = new Promise((resolve) => { - msgController.spectralProfileStream.subscribe({ - next: (data) => { - if (data.progress === 1) { - resolve(data) - } - } - }) - }) - let SpectralProfileDataResponse = await SpectralProfileDataStreamPromise as CARTA.SpectralProfileData; - expect(SpectralProfileDataResponse.progress).toEqual(1); - }, spectralProfileTimeout); - + test( + `(Step 1)"${assertItem.fileOpen[0].file}" OPEN_FILE_ACK and REGION_HISTOGRAM_DATA should arrive within ${openFileTimeout} ms`, + async () => { + msgController.closeFile(-1); + msgController.closeFile(0); + let OpenFileResponse = await msgController.loadFile(assertItem.fileOpen[0]); + expect(OpenFileResponse.success).toEqual(true); + let RegionHistrogramDataResponse = await Stream(CARTA.RegionHistogramData, 1); + }, + openFileTimeout + ); + + test( + `(Step 1)"${assertItem.fileOpen[0].file}" SetImageChannels & SetCursor responses should arrive within ${readFileTimeout} ms`, + async () => { + msgController.addRequiredTiles(assertItem.initTilesReq); + let RasterTileDataResponse = await Stream( + CARTA.RasterTileData, + assertItem.initTilesReq.tiles.length + 2 + ); + + msgController.setCursor( + assertItem.initSetCursor.fileId, + assertItem.initSetCursor.point.x, + assertItem.initSetCursor.point.y + ); + let SpatialProfileDataResponse1 = await Stream(CARTA.SpatialProfileData, 1); + + msgController.setSpatialRequirements(assertItem.initSpatialRequirements); + let SpatialProfileDataResponse2 = await Stream(CARTA.SpatialProfileData, 1); + + expect(RasterTileDataResponse.length).toEqual(assertItem.initTilesReq.tiles.length + 2); + }, + openFileTimeout + ); + + test( + `(Step 2)"${assertItem.fileOpen[0].file}" SET_REGION_ACK should arrive within ${readRegionTimeout} ms`, + async () => { + let setRegionAckResponse = await msgController.setRegion( + assertItem.setRegion[0].fileId, + assertItem.setRegion[0].regionId, + assertItem.setRegion[0].regionInfo + ); + expect(setRegionAckResponse.regionId).toEqual(1); + expect(setRegionAckResponse.success).toEqual(true); + }, + readRegionTimeout + ); + + test( + `(Step 3)"${assertItem.fileOpen[0].file}" SPECTRAL_PROFILE_DATA stream should arrive within ${spectralProfileTimeout} ms`, + async () => { + msgController.setSpectralRequirements(assertItem.setSpectralRequirements[0]); + let SpectralProfileDataStreamPromise = new Promise((resolve) => { + msgController.spectralProfileStream.subscribe({ + next: (data) => { + if (data.progress === 1) { + resolve(data); + } + }, + }); + }); + let SpectralProfileDataResponse = + (await SpectralProfileDataStreamPromise) as CARTA.SpectralProfileData; + expect(SpectralProfileDataResponse.progress).toEqual(1); + }, + spectralProfileTimeout + ); }); afterAll(() => msgController.closeConnection()); }); -}); \ No newline at end of file +}); diff --git a/src/performance/parsing.ts b/src/performance/parsing.ts deleted file mode 100644 index d2912f7..0000000 --- a/src/performance/parsing.ts +++ /dev/null @@ -1,142 +0,0 @@ -import * as _ from "lodash"; -import {CARTA} from "carta-protobuf"; - -// order matters, since ... and .. both having .. (same for < and <=, > and >=) -export enum ComparisonOperator { - Equal = "==", - NotEqual = "!=", - LessorOrEqual = "<=", - Lesser = "<", - GreaterOrEqual = ">=", - Greater = ">", - RangeClosed = "...", - RangeOpen = ".." -} - -export function parseBoolean(value: string, defaultValue: boolean): boolean { - if (value === "true") { - return true; - } else if (value === "false") { - return false; - } else { - return defaultValue; - } -} - -export function parseNumber(val: number, initVal: number): number { - if (isFinite(val)) { - return val; - } else { - return initVal; - } -} - -export function trimFitsComment(val: string): string { - if (!val) { - return ""; - } - - // replace standard Fits header comments - return val.replace(/\s\/\s?.*$/, ""); -} - -export function mapToObject(map: Map) { - const obj: {[k: string]: T} = {}; - map.forEach((value, key) => { - obj[key.toString()] = value; - }); - console.log(obj) - return obj; -} - -export function findDeep(obj: any, pred: (obj: any) => boolean) { - if (pred(obj)) { - return [obj]; - } - return _.flatten( - _.map(obj, child => { - return typeof child === "object" ? findDeep(child, pred) : []; - }) - ); -} - -// parsing filter string for TableComponent filter function -function getNumberFromFilterString(filterString: string): number { - const n = filterString.replace(/[^0-9.+-.]+/g, ""); - if (n !== "") { - return Number(n); - } - return undefined; -} - -export function getComparisonOperatorAndValue(filterString: string): {operator: CARTA.ComparisonOperator; values: number[]} { - const filter = filterString.replace(/\s/g, ""); - let result = {operator: -1, values: []}; - // order matters, since ... and .. both include .. (same for < and <=, > and >=) - for (const key of Object.keys(ComparisonOperator)) { - const operator = ComparisonOperator[key]; - const found = filter.includes(operator); - if (found) { - if (operator === ComparisonOperator.Equal) { - const equalTo = getNumberFromFilterString(filter); - if (equalTo !== undefined) { - result.operator = CARTA.ComparisonOperator.Equal; - result.values.push(equalTo); - } - return result; - } else if (operator === ComparisonOperator.NotEqual) { - const notEqualTo = getNumberFromFilterString(filter); - if (notEqualTo !== undefined) { - result.operator = CARTA.ComparisonOperator.NotEqual; - result.values.push(notEqualTo); - } - return result; - } else if (operator === ComparisonOperator.Lesser) { - const lessThan = getNumberFromFilterString(filter); - if (lessThan !== undefined) { - result.operator = CARTA.ComparisonOperator.Lesser; - result.values.push(lessThan); - } - return result; - } else if (operator === ComparisonOperator.LessorOrEqual) { - const lessThanOrEqualTo = getNumberFromFilterString(filter); - if (lessThanOrEqualTo !== undefined) { - result.values.push(lessThanOrEqualTo); - result.operator = CARTA.ComparisonOperator.LessorOrEqual; - } - return result; - } else if (operator === ComparisonOperator.Greater) { - const greaterThan = getNumberFromFilterString(filter); - if (greaterThan !== undefined) { - result.operator = CARTA.ComparisonOperator.Greater; - result.values.push(greaterThan); - } - return result; - } else if (operator === ComparisonOperator.GreaterOrEqual) { - const greaterThanOrEqualTo = getNumberFromFilterString(filter); - if (greaterThanOrEqualTo !== undefined) { - result.values.push(greaterThanOrEqualTo); - result.operator = CARTA.ComparisonOperator.GreaterOrEqual; - } - return result; - } else if (operator === ComparisonOperator.RangeOpen) { - const fromTo = filter.split(ComparisonOperator.RangeOpen, 2); - if (fromTo[0] !== "" && fromTo[1] !== "") { - result.values.push(Number(fromTo[0])); - result.values.push(Number(fromTo[1])); - result.operator = CARTA.ComparisonOperator.RangeOpen; - } - return result; - } else if (operator === ComparisonOperator.RangeClosed) { - const betweenAnd = filter.split(ComparisonOperator.RangeClosed, 2); - if (betweenAnd[0] !== "" && betweenAnd[1] !== "") { - result.values.push(Number(betweenAnd[0])); - result.values.push(Number(betweenAnd[1])); - result.operator = CARTA.ComparisonOperator.RangeClosed; - } - return result; - } - } - } - return result; -} From bba25159515586f9881dcb7cc1d2a2e5daa48d58 Mon Sep 17 00:00:00 2001 From: Cheng-Chin Chiang Date: Thu, 13 Nov 2025 16:15:30 +0800 Subject: [PATCH 6/7] Remove duplicate code in the performance test module --- src/performance/MessageController.ts | 1506 ----------------- src/performance/MyClient.ts | 180 -- src/performance/MyParsing.ts | 145 -- .../PERF_ANIMATOR_CONTOUR_CASA.test.ts | 6 +- .../PERF_ANIMATOR_CONTOUR_FITS.test.ts | 6 +- .../PERF_ANIMATOR_CONTOUR_HDF5.test.ts | 6 +- .../PERF_CONTOUR_DATA_Mode0.test.ts | 6 +- .../PERF_CONTOUR_DATA_Mode1.test.ts | 6 +- .../PERF_CONTOUR_DATA_Mode2.test.ts | 6 +- .../PERF_CUBE_HISTOGRAM_CASA.test.ts | 6 +- .../PERF_CUBE_HISTOGRAM_FITS.test.ts | 6 +- .../PERF_CUBE_HISTOGRAM_HDF5.test.ts | 6 +- src/performance/PERF_LOAD_IMAGE_CASA.test.ts | 6 +- src/performance/PERF_LOAD_IMAGE_FITS.test.ts | 6 +- src/performance/PERF_LOAD_IMAGE_HDF5.test.ts | 6 +- src/performance/PERF_MOMENTS_CASA.test.ts | 6 +- src/performance/PERF_MOMENTS_FITS.test.ts | 6 +- src/performance/PERF_MOMENTS_HDF5.test.ts | 6 +- src/performance/PERF_PV_CASA.test.ts | 6 +- src/performance/PERF_PV_FITS.test.ts | 6 +- src/performance/PERF_PV_HDF5.test.ts | 6 +- .../PERF_RASTER_TILE_DATA_CASA.test.ts | 6 +- .../PERF_RASTER_TILE_DATA_FITS.test.ts | 6 +- .../PERF_RASTER_TILE_DATA_HDF5.test.ts | 6 +- .../PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts | 6 +- .../PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts | 6 +- .../PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts | 6 +- src/performance/config.json | 79 - src/test/config.json | 8 + 29 files changed, 80 insertions(+), 1982 deletions(-) delete mode 100644 src/performance/MessageController.ts delete mode 100644 src/performance/MyClient.ts delete mode 100644 src/performance/MyParsing.ts delete mode 100644 src/performance/config.json diff --git a/src/performance/MessageController.ts b/src/performance/MessageController.ts deleted file mode 100644 index 3d0ffaf..0000000 --- a/src/performance/MessageController.ts +++ /dev/null @@ -1,1506 +0,0 @@ -import { action, makeObservable, observable, runInAction } from 'mobx'; -import { CARTA } from 'carta-protobuf'; -import { Subject, throwError } from 'rxjs'; -import { mapToObject } from './MyParsing'; -import IRegionInfo = CARTA.IRegionInfo; -import WebSocket from 'ws'; -import config from './config.json'; -const icdVersion = config.icdVersion; - -export enum ConnectionStatus { - CLOSED = 0, - PENDING = 1, - ACTIVE = 2, -} - -export const INVALID_ANIMATION_ID = -1; - -type HandlerFunction = (eventId: number, parsedMessage: any) => void; - -interface IBackendResponse { - success?: boolean | null; - message?: string | null; -} - -// Deferred class adapted from https://stackoverflow.com/a/58610922/1727322 -export class Deferred { - private _resolve: (value: T) => void = () => {}; - private _reject: (reason: any) => void = () => {}; - - private _promise: Promise = new Promise((resolve, reject) => { - this._reject = reject; - this._resolve = resolve; - }); - - public get promise(): Promise { - return this._promise; - } - - public resolve(value: T) { - this._resolve(value); - } - - public reject(reason: any) { - this._reject(reason); - } -} - -export class MessageController { - private static staticInstance: MessageController; - - static get Instance() { - if (!MessageController.staticInstance) { - MessageController.staticInstance = new MessageController(); - } - return MessageController.staticInstance; - } - - private static readonly IcdVersion = icdVersion; - private static readonly DefaultFeatureFlags = - CARTA.ClientFeatureFlags.WEB_ASSEMBLY | CARTA.ClientFeatureFlags.WEB_GL; - private static readonly MaxConnectionAttempts = 15; - private static readonly ConnectionAttemptDelay = 1000; - - @observable connectionStatus: ConnectionStatus; - readonly loggingEnabled: boolean; - @observable connectionDropped: boolean; - @observable endToEndPing: number; - - public animationId: number; - public sessionId: number; - public serverFeatureFlags: number; - public serverUrl: string; - public count: number; - - private connection: WebSocket; - private lastPingTime: number; - private lastPongTime: number; - private deferredMap: Map>; - private eventCounter: number; - - readonly rasterTileStream: Subject; - readonly rasterSyncStream: Subject; - readonly histogramStream: Subject; - readonly errorStream: Subject; - readonly spatialProfileStream: Subject; - readonly spectralProfileStream: Subject; - readonly statsStream: Subject; - readonly contourStream: Subject; - readonly catalogStream: Subject; - readonly momentProgressStream: Subject; - readonly scriptingStream: Subject; - readonly listProgressStream: Subject; - readonly pvProgressStream: Subject; - readonly fittingProgressStream: Subject; - readonly vectorTileStream: Subject; - readonly pvPreviewStream: Subject; - private readonly decoderMap: Map; - - private constructor() { - this.count = 0; - makeObservable(this); - this.loggingEnabled = true; - this.deferredMap = new Map>(); - - this.eventCounter = 1; - this.sessionId = 0; - this.endToEndPing = NaN; - this.animationId = INVALID_ANIMATION_ID; - this.connectionStatus = ConnectionStatus.CLOSED; - this.rasterTileStream = new Subject(); - this.rasterSyncStream = new Subject(); - this.histogramStream = new Subject(); - this.errorStream = new Subject(); - this.spatialProfileStream = new Subject(); - this.spectralProfileStream = new Subject(); - this.statsStream = new Subject(); - this.contourStream = new Subject(); - this.scriptingStream = new Subject(); - this.catalogStream = new Subject(); - this.momentProgressStream = new Subject(); - this.listProgressStream = new Subject(); - this.pvProgressStream = new Subject(); - this.fittingProgressStream = new Subject(); - this.vectorTileStream = new Subject(); - this.pvPreviewStream = new Subject(); - - // Construct handler and decoder maps - this.decoderMap = new Map([ - [ - CARTA.EventType.REGISTER_VIEWER_ACK, - { - messageClass: CARTA.RegisterViewerAck, - handler: this.onRegisterViewerAck, - }, - ], - [ - CARTA.EventType.FILE_LIST_RESPONSE, - { - messageClass: CARTA.FileListResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.REGION_LIST_RESPONSE, - { - messageClass: CARTA.RegionListResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.CATALOG_LIST_RESPONSE, - { - messageClass: CARTA.CatalogListResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.FILE_LIST_PROGRESS, - { - messageClass: CARTA.ListProgress, - handler: this.onStreamedListProgress, - }, - ], - [ - CARTA.EventType.FILE_INFO_RESPONSE, - { - messageClass: CARTA.FileInfoResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.REGION_FILE_INFO_RESPONSE, - { - messageClass: CARTA.RegionFileInfoResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.CATALOG_FILE_INFO_RESPONSE, - { - messageClass: CARTA.CatalogFileInfoResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.OPEN_FILE_ACK, - { - messageClass: CARTA.OpenFileAck, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.SAVE_FILE_ACK, - { - messageClass: CARTA.SaveFileAck, - handler: this.onSaveFileAndRegionAck, - }, - ], - [ - CARTA.EventType.OPEN_CATALOG_FILE_ACK, - { - messageClass: CARTA.OpenCatalogFileAck, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.IMPORT_REGION_ACK, - { - messageClass: CARTA.ImportRegionAck, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.EXPORT_REGION_ACK, - { - messageClass: CARTA.ExportRegionAck, - handler: this.onSaveFileAndRegionAck, - }, - ], - [ - CARTA.EventType.SET_REGION_ACK, - { - messageClass: CARTA.SetRegionAck, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.RESUME_SESSION_ACK, - { - messageClass: CARTA.ResumeSessionAck, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.START_ANIMATION_ACK, - { - messageClass: CARTA.StartAnimationAck, - handler: this.onStartAnimationAck, - }, - ], - [ - CARTA.EventType.RASTER_TILE_DATA, - { - messageClass: CARTA.RasterTileData, - handler: this.onStreamedRasterTileData, - }, - ], - [ - CARTA.EventType.REGION_HISTOGRAM_DATA, - { - messageClass: CARTA.RegionHistogramData, - handler: this.onStreamedRegionHistogramData, - }, - ], - [ - CARTA.EventType.ERROR_DATA, - { - messageClass: CARTA.ErrorData, - handler: this.onStreamedErrorData, - }, - ], - [ - CARTA.EventType.SPATIAL_PROFILE_DATA, - { - messageClass: CARTA.SpatialProfileData, - handler: this.onStreamedSpatialProfileData, - }, - ], - [ - CARTA.EventType.SPECTRAL_PROFILE_DATA, - { - messageClass: CARTA.SpectralProfileData, - handler: this.onStreamedSpectralProfileData, - }, - ], - [ - CARTA.EventType.REGION_STATS_DATA, - { - messageClass: CARTA.RegionStatsData, - handler: this.onStreamedRegionStatsData, - }, - ], - [ - CARTA.EventType.CONTOUR_IMAGE_DATA, - { - messageClass: CARTA.ContourImageData, - handler: this.onStreamedContourData, - }, - ], - [ - CARTA.EventType.CATALOG_FILTER_RESPONSE, - { - messageClass: CARTA.CatalogFilterResponse, - handler: this.onStreamedCatalogData, - }, - ], - [ - CARTA.EventType.RASTER_TILE_SYNC, - { - messageClass: CARTA.RasterTileSync, - handler: this.onStreamedRasterSync, - }, - ], - [ - CARTA.EventType.MOMENT_PROGRESS, - { - messageClass: CARTA.MomentProgress, - handler: this.onStreamedMomentProgress, - }, - ], - [ - CARTA.EventType.MOMENT_RESPONSE, - { - messageClass: CARTA.MomentResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.SCRIPTING_REQUEST, - { - messageClass: CARTA.ScriptingRequest, - handler: this.onScriptingRequest, - }, - ], - [ - CARTA.EventType.CONCAT_STOKES_FILES_ACK, - { - messageClass: CARTA.ConcatStokesFilesAck, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.PV_PROGRESS, - { - messageClass: CARTA.PvProgress, - handler: this.onStreamedPvProgress, - }, - ], - [ - CARTA.EventType.PV_RESPONSE, - { - messageClass: CARTA.PvResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.FITTING_PROGRESS, - { - messageClass: CARTA.FittingProgress, - handler: this.onStreamedFittingProgress, - }, - ], - [ - CARTA.EventType.FITTING_RESPONSE, - { - messageClass: CARTA.FittingResponse, - handler: this.onDeferredResponse, - }, - ], - [ - CARTA.EventType.VECTOR_OVERLAY_TILE_DATA, - { - messageClass: CARTA.VectorOverlayTileData, - handler: this.onStreamedVectorOverlayData, - }, - ], - [ - CARTA.EventType.PV_PREVIEW_DATA, - { - messageClass: CARTA.PvPreviewData, - handler: this.onStreamedPvPreviewData, - }, - ], - [ - CARTA.EventType.REMOTE_FILE_RESPONSE, - { - messageClass: CARTA.RemoteFileResponse, - handler: this.onDeferredResponse, - }, - ], - ]); - - // check ping every 5 seconds - // setInterval(this.sendPing, 5000); - } - - @action('connect') - async connect(url: string): Promise { - if (this.connection) { - this.connection.onclose = null; - this.connection.close(); - } - - const isReconnection: boolean = url === this.serverUrl; - let connectionAttempts = 0; - this.connectionDropped = false; - this.connectionStatus = ConnectionStatus.PENDING; - this.serverUrl = url; - this.connection = new WebSocket(url); - this.connection.binaryType = 'arraybuffer'; - this.connection.onmessage = this.messageHandler.bind(this); - this.connection.onclose = (ev: CloseEvent) => - runInAction(() => { - // Only change to closed connection if the connection was originally active or this is a reconnection - if ( - this.connectionStatus === ConnectionStatus.ACTIVE || - isReconnection || - connectionAttempts >= MessageController.MaxConnectionAttempts - ) { - this.connectionStatus = ConnectionStatus.CLOSED; - } else { - connectionAttempts++; - setTimeout(() => { - const newConnection = new WebSocket(url); - newConnection.binaryType = 'arraybuffer'; - newConnection.onopen = this.connection.onopen; - newConnection.onerror = this.connection.onerror; - newConnection.onclose = this.connection.onclose; - newConnection.onmessage = this.connection.onmessage; - this.connection = newConnection; - }, MessageController.ConnectionAttemptDelay); - } - }); - - this.deferredMap.clear(); - this.eventCounter = 1; - const requestId = this.eventCounter; - - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - - this.connection.onopen = action(() => { - if (this.connectionStatus === ConnectionStatus.CLOSED) { - this.connectionDropped = true; - } - this.connectionStatus = ConnectionStatus.ACTIVE; - const message = CARTA.RegisterViewer.create({ - sessionId: this.sessionId, - clientFeatureFlags: MessageController.DefaultFeatureFlags, - }); - // observer map is cleared, so that old subscriptions don't get incorrectly fired - - this.logEvent(CARTA.EventType.REGISTER_VIEWER, requestId, message, false); - if (this.sendEvent(CARTA.EventType.REGISTER_VIEWER, CARTA.RegisterViewer.encode(message).finish())) { - this.deferredMap.set(requestId, deferredResponse); - } else { - throw new Error('Could not send event'); - } - }); - - this.connection.onerror = (ev) => { - // AppStore.Instance.logStore.addInfo(`Connecting to server ${url} failed.`, ["network"]); - console.log(ev); - }; - - return await deferredResponse.promise; - } - - @action closeConnection = () => { - if (this.connection && this.connectionStatus !== ConnectionStatus.CLOSED) { - this.connection.close(); - } - }; - - checkConnectionStatus = () => { - return this.connectionStatus; - }; - - @action updateEndToEndPing = () => { - this.endToEndPing = this.lastPongTime - this.lastPingTime; - }; - - async getFileList( - directory: string | null, - filterMode: CARTA.FileListFilterMode - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.FileListRequest.create({ - directory, - filterMode, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.FILE_LIST_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.FILE_LIST_REQUEST, CARTA.FileListRequest.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async getRegionList( - directory: string | null, - filterMode: CARTA.FileListFilterMode - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.RegionListRequest.create({ - directory, - filterMode, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.REGION_LIST_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.REGION_LIST_REQUEST, CARTA.RegionListRequest.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async getCatalogList( - directory: string | null, - filterMode: CARTA.FileListFilterMode - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.CatalogListRequest.create({ - directory, - filterMode, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.CATALOG_LIST_REQUEST, requestId, message, false); - if ( - this.sendEvent(CARTA.EventType.CATALOG_LIST_REQUEST, CARTA.CatalogListRequest.encode(message).finish()) - ) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async getFileInfo( - directory: string | null | undefined, - file: string | null | undefined, - hdu: string | null | undefined - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const supportAipsBeam = false; - const message = CARTA.FileInfoRequest.create({ - directory, - file, - hdu, - supportAipsBeam, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.FILE_INFO_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.FILE_INFO_REQUEST, CARTA.FileInfoRequest.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async getRegionFileInfo( - directory: string | null | undefined, - file: string | null | undefined - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.RegionFileInfoRequest.create({ - directory, - file, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.REGION_FILE_INFO_REQUEST, requestId, message, false); - if ( - this.sendEvent( - CARTA.EventType.REGION_FILE_INFO_REQUEST, - CARTA.RegionFileInfoRequest.encode(message).finish() - ) - ) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async getCatalogFileInfo( - directory: string | null | undefined, - name: string | null | undefined - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.CatalogFileInfoRequest.create({ - directory, - name, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.CATALOG_FILE_INFO_REQUEST, requestId, message, false); - if ( - this.sendEvent( - CARTA.EventType.CATALOG_FILE_INFO_REQUEST, - CARTA.CatalogFileInfoRequest.encode(message).finish() - ) - ) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async importRegion( - directory: string, - file: string, - type: CARTA.FileType, - fileId: number - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.ImportRegion.create({ - directory, - file, - type, - groupId: fileId, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.IMPORT_REGION, requestId, message, false); - if (this.sendEvent(CARTA.EventType.IMPORT_REGION, CARTA.ImportRegion.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async exportRegion( - directory: string, - file: string, - type: CARTA.FileType, - coordType: CARTA.CoordinateType, - fileId: number, - regionStyles: Map, - overwrite: boolean = true - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.ExportRegion.create({ - directory, - file, - type, - fileId, - regionStyles: mapToObject(regionStyles), - coordType, - overwrite, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.EXPORT_REGION, requestId, message, false); - if (this.sendEvent(CARTA.EventType.EXPORT_REGION, CARTA.ExportRegion.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async loadFile(input: CARTA.IOpenFile): Promise { - let directory = input.directory; - let file = input.file; - let hdu = input.hdu; - let fileId = input.fileId; - let imageArithmetic = input.lelExpr; - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.OpenFile.create({ - directory, - file, - hdu, - fileId, - lelExpr: imageArithmetic, - renderMode: CARTA.RenderMode.RASTER, - supportAipsBeam: false, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.OPEN_FILE, requestId, message, false); - if (this.sendEvent(CARTA.EventType.OPEN_FILE, CARTA.OpenFile.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async loadStokeFiles( - stokesFiles: CARTA.IStokesFile[], - fileId: number, - renderMode: CARTA.RenderMode - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const concatStokes: CARTA.IConcatStokesFiles = { - stokesFiles: stokesFiles, - fileId: fileId, - renderMode: renderMode, - }; - const message = CARTA.ConcatStokesFiles.create(concatStokes); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.CONCAT_STOKES_FILES, requestId, message, false); - if (this.sendEvent(CARTA.EventType.CONCAT_STOKES_FILES, CARTA.ConcatStokesFiles.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async loadCatalogFile( - directory: string, - name: string, - fileId: number, - previewDataSize: number - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.OpenCatalogFile.create({ - directory, - name, - fileId, - previewDataSize, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.OPEN_CATALOG_FILE, requestId, message, false); - if (this.sendEvent(CARTA.EventType.OPEN_CATALOG_FILE, CARTA.OpenCatalogFile.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - @action('close catalog file') - closeCatalogFile(fileId: number): boolean { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.CloseCatalogFile.create({ fileId }); - this.logEvent(CARTA.EventType.CLOSE_CATALOG_FILE, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.CLOSE_CATALOG_FILE, CARTA.CloseCatalogFile.encode(message).finish())) { - return true; - } - } - return false; - } - - async saveFile( - fileId: number, - outputFileDirectory: string, - outputFileName: string, - outputFileType: CARTA.FileType, - regionId?: number, - channels?: number[], - stokes?: number[], - keepDegenerate?: boolean, - restFreq?: number, - overwrite: boolean = true - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.SaveFile.create({ - fileId, - outputFileDirectory, - outputFileName, - outputFileType, - regionId, - channels, - stokes, - keepDegenerate, - restFreq, - overwrite, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.SAVE_FILE, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.SAVE_FILE, CARTA.SaveFile.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - closeFile(fileId: number): boolean { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.CloseFile.create({ fileId }); - this.logEvent(CARTA.EventType.CLOSE_FILE, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.CLOSE_FILE, CARTA.CloseFile.encode(message).finish())) { - return true; - } - } - return false; - } - - @action('set channels') - setChannels(input: CARTA.ISetImageChannels): boolean { - let fileId = input.fileId; - let channel = input.channel; - let stokes = input.stokes; - let requiredTiles = input.requiredTiles; - let channelMapEnabled = input.channelMapEnabled; - let channelRange = input.channelRange; - let currentRange = input.currentRange; - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.SetImageChannels.create({ - fileId: fileId, - channel: channel, - stokes: stokes, - requiredTiles: requiredTiles, - channelRange: channelRange, - currentRange: currentRange, - channelMapEnabled: channelMapEnabled, - }); - this.logEvent(CARTA.EventType.SET_IMAGE_CHANNELS, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.SET_IMAGE_CHANNELS, CARTA.SetImageChannels.encode(message).finish())) { - return true; - } - } - return false; - } - - @action('set cursor') - setCursor(fileId: number, x: number, y: number): boolean { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.SetCursor.create({ fileId, point: { x, y } }); - this.logEvent(CARTA.EventType.SET_CURSOR, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.SET_CURSOR, CARTA.SetCursor.encode(message).finish())) { - return true; - } - } - return false; - } - - spectialSetRegion(fileId: number, regionId: number, region: IRegionInfo, isRequestingPreview?: boolean): boolean { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.SetRegion.create({ - fileId, - regionId, - regionInfo: { - regionType: region.regionType, - rotation: region.rotation, - controlPoints: region.controlPoints.slice(), - }, - previewRegion: isRequestingPreview, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.SET_REGION, requestId, message, false); - if (this.sendEvent(CARTA.EventType.SET_REGION, CARTA.SetRegion.encode(message).finish())) { - return true; - } - } - return false; - } - - async setRegion( - fileId: number, - regionId: number, - region: IRegionInfo, - isRequestingPreview?: boolean - ): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.SetRegion.create({ - fileId, - regionId, - regionInfo: { - regionType: region.regionType, - rotation: region.rotation, - controlPoints: region.controlPoints.slice(), - }, - previewRegion: isRequestingPreview, - }); - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.SET_REGION, requestId, message, false); - if (this.sendEvent(CARTA.EventType.SET_REGION, CARTA.SetRegion.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - @action('remove region') - removeRegion(regionId: number) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.RemoveRegion.create({ regionId }); - this.logEvent(CARTA.EventType.REMOVE_REGION, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.REMOVE_REGION, CARTA.RemoveRegion.encode(message).finish())) { - return true; - } - } - return false; - } - - @action('set catalog filter') - setCatalogFilterRequest(filterRequest: CARTA.ICatalogFilterRequest) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.CATALOG_FILTER_REQUEST, this.eventCounter, filterRequest, false); - if ( - this.sendEvent( - CARTA.EventType.CATALOG_FILTER_REQUEST, - CARTA.CatalogFilterRequest.encode(filterRequest).finish() - ) - ) { - return true; - } - } - return false; - } - - @action('set spatial requirements') - setSpatialRequirements(requirementsMessage: CARTA.ISetSpatialRequirements) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.SET_SPATIAL_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if ( - this.sendEvent( - CARTA.EventType.SET_SPATIAL_REQUIREMENTS, - CARTA.SetSpatialRequirements.encode(requirementsMessage).finish() - ) - ) { - return true; - } - } - return false; - } - - @action('set spectral requirements') - setSpectralRequirements(requirementsMessage: CARTA.ISetSpectralRequirements) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.SET_SPECTRAL_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if ( - this.sendEvent( - CARTA.EventType.SET_SPECTRAL_REQUIREMENTS, - CARTA.SetSpectralRequirements.encode(requirementsMessage).finish() - ) - ) { - return true; - } - } - return false; - } - - @action('set stats requirements') - setStatsRequirements(requirementsMessage: CARTA.ISetStatsRequirements) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.SET_STATS_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if ( - this.sendEvent( - CARTA.EventType.SET_STATS_REQUIREMENTS, - CARTA.SetStatsRequirements.encode(requirementsMessage).finish() - ) - ) { - return true; - } - } - return false; - } - - @action('set histogram requirements') - setHistogramRequirements(requirementsMessage: CARTA.ISetHistogramRequirements) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.SET_HISTOGRAM_REQUIREMENTS, this.eventCounter, requirementsMessage, false); - if ( - this.sendEvent( - CARTA.EventType.SET_HISTOGRAM_REQUIREMENTS, - CARTA.SetHistogramRequirements.encode(requirementsMessage).finish() - ) - ) { - return true; - } - } - return false; - } - - @action('add required tiles') - addRequiredTiles(input: CARTA.IAddRequiredTiles): boolean { - let fileId = input.fileId; - let tiles = input.tiles; - let type = input.compressionType; - let quality = input.compressionQuality; - let currentTiles = input.currentTiles; - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.AddRequiredTiles.create({ - fileId: fileId, - tiles: tiles, - compressionType: type, - compressionQuality: quality, - currentTiles: currentTiles, - }); - this.logEvent(CARTA.EventType.ADD_REQUIRED_TILES, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.ADD_REQUIRED_TILES, CARTA.AddRequiredTiles.encode(message).finish())) { - return true; - } - } - return false; - } - - @action('remove required tiles') - removeRequiredTiles(fileId: number, tiles: Array): boolean { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - const message = CARTA.RemoveRequiredTiles.create({ fileId, tiles }); - this.logEvent(CARTA.EventType.REMOVE_REQUIRED_TILES, this.eventCounter, message, false); - if ( - this.sendEvent( - CARTA.EventType.REMOVE_REQUIRED_TILES, - CARTA.RemoveRequiredTiles.encode(message).finish() - ) - ) { - return true; - } - } - return false; - } - - async startAnimation(animationMessage: CARTA.IStartAnimation): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.START_ANIMATION, requestId, animationMessage, false); - if ( - this.sendEvent(CARTA.EventType.START_ANIMATION, CARTA.StartAnimation.encode(animationMessage).finish()) - ) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - @action('stop animation') - stopAnimation(animationMessage: CARTA.IStopAnimation) { - this.animationId = INVALID_ANIMATION_ID; - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.STOP_ANIMATION, this.eventCounter, animationMessage, false); - if (this.sendEvent(CARTA.EventType.STOP_ANIMATION, CARTA.StopAnimation.encode(animationMessage).finish())) { - return true; - } - } - return false; - } - - @action('animation flow control') - sendAnimationFlowControl(message: CARTA.IAnimationFlowControl) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.ANIMATION_FLOW_CONTROL, this.eventCounter, message, false); - if ( - this.sendEvent( - CARTA.EventType.ANIMATION_FLOW_CONTROL, - CARTA.AnimationFlowControl.encode(message).finish() - ) - ) { - return true; - } - } - return false; - } - - @action('set contour parameters') - setContourParameters(message: CARTA.ISetContourParameters) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.SET_CONTOUR_PARAMETERS, this.eventCounter, message, false); - if ( - this.sendEvent( - CARTA.EventType.SET_CONTOUR_PARAMETERS, - CARTA.SetContourParameters.encode(message).finish() - ) - ) { - return true; - } - } - return false; - } - - @action('set vector overlay parameters') - setVectorOverlayParameters(message: CARTA.ISetVectorOverlayParameters) { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.SET_VECTOR_OVERLAY_PARAMETERS, this.eventCounter, message, false); - if ( - this.sendEvent( - CARTA.EventType.SET_VECTOR_OVERLAY_PARAMETERS, - CARTA.SetVectorOverlayParameters.encode(message).finish() - ) - ) { - return true; - } - } - return false; - } - - async resumeSession(message: CARTA.IResumeSession): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.RESUME_SESSION, requestId, message, false); - if (this.sendEvent(CARTA.EventType.RESUME_SESSION, CARTA.ResumeSession.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - @action('set auth token') - setAuthToken = (token: string) => { - document.cookie = `CARTA-Authorization=${token}; path=/`; - }; - - async requestMoment(message: CARTA.IMomentRequest): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.MOMENT_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.MOMENT_REQUEST, CARTA.MomentRequest.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - cancelRequestingMoment(fileId: number) { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error('Not connected')); - } else { - const message = CARTA.StopMomentCalc.create({ fileId }); - this.logEvent(CARTA.EventType.STOP_MOMENT_CALC, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.STOP_MOMENT_CALC, CARTA.StopMomentCalc.encode(message).finish())) { - return true; - } - return throwError(new Error('Could not send event')); - } - } - - @action('cancel requesting file list') - cancelRequestingFileList(fileListType: CARTA.FileListType) { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error('Not connected')); - } else { - const message = CARTA.StopFileList.create({ - fileListType: fileListType, - }); - this.logEvent(CARTA.EventType.STOP_FILE_LIST, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.STOP_FILE_LIST, new Uint8Array())) { - return true; - } - return throwError(new Error('Could not send event')); - } - } - - async requestPV(message: CARTA.IPvRequest): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.PV_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.PV_REQUEST, CARTA.PvRequest.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - async requestRemoteFile(message: CARTA.IRemoteFileRequest): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.REMOTE_FILE_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.REMOTE_FILE_REQUEST, CARTA.RemoteFileRequest.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - cancelRequestingPV(fileId: number) { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error('Not connected')); - } else { - const message = CARTA.StopPvCalc.create({ fileId }); - this.logEvent(CARTA.EventType.STOP_PV_CALC, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.STOP_PV_CALC, CARTA.StopPvCalc.encode(message).finish())) { - return true; - } - return throwError(new Error('Could not send event')); - } - } - - stopPvPreview(previewId: number) { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.StopPvPreview.create({ previewId }); - this.logEvent(CARTA.EventType.STOP_PV_PREVIEW, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.STOP_PV_PREVIEW, CARTA.StopPvPreview.encode(message).finish())) { - console.log('stop Pv preview sent'); - return true; - } - throw new Error('Could not send event'); - } - } - - closePvPreview(previewId: number) { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const message = CARTA.ClosePvPreview.create({ previewId }); - this.logEvent(CARTA.EventType.CLOSE_PV_PREVIEW, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.CLOSE_PV_PREVIEW, CARTA.ClosePvPreview.encode(message).finish())) { - return true; - } - throw new Error('Could not send event'); - } - } - - async requestFitting(message: CARTA.IFittingRequest): Promise { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - throw new Error('Not connected'); - } else { - const requestId = this.eventCounter; - this.logEvent(CARTA.EventType.FITTING_REQUEST, requestId, message, false); - if (this.sendEvent(CARTA.EventType.FITTING_REQUEST, CARTA.FittingRequest.encode(message).finish())) { - const deferredResponse = new Deferred(); - this.deferredMap.set(requestId, deferredResponse); - return await deferredResponse.promise; - } else { - throw new Error('Could not send event'); - } - } - } - - cancelRequestingFitting(fileId: number) { - if (this.connectionStatus !== ConnectionStatus.ACTIVE) { - return throwError(new Error('Not connected')); - } else { - const message = CARTA.StopFitting.create({ fileId }); - this.logEvent(CARTA.EventType.STOP_FITTING, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.STOP_FITTING, CARTA.StopFitting.encode(message).finish())) { - return true; - } - return throwError(new Error('Could not send event')); - } - } - - @action('send scripting response') - sendScriptingResponse = (message: CARTA.IScriptingResponse) => { - if (this.connectionStatus === ConnectionStatus.ACTIVE) { - this.logEvent(CARTA.EventType.SCRIPTING_RESPONSE, this.eventCounter, message, false); - if (this.sendEvent(CARTA.EventType.SCRIPTING_RESPONSE, CARTA.ScriptingResponse.encode(message).finish())) { - return true; - } - } - return false; - }; - - public serverHasFeature(feature: CARTA.ServerFeatureFlags): boolean { - return (this.serverFeatureFlags & feature) !== 0; - } - - private messageHandler(event: MessageEvent) { - if (event.data === 'PONG') { - this.lastPongTime = performance.now(); - this.updateEndToEndPing(); - return; - } else if (event.data.byteLength < 8) { - console.log('Unknown event format'); - return; - } - - const eventHeader16 = new Uint16Array(event.data, 0, 2); - const eventHeader32 = new Uint32Array(event.data, 4, 1); - const eventData = new Uint8Array(event.data, 8); - - const eventType: CARTA.EventType = eventHeader16[0]; - const eventIcdVersion = eventHeader16[1]; - const eventId = eventHeader32[0]; - - if (eventIcdVersion !== MessageController.IcdVersion) { - console.log( - `Server event has ICD version ${eventIcdVersion}, which differs from frontend version ${MessageController.IcdVersion}. Errors may occur` - ); - } - try { - const decoderEntry = this.decoderMap.get(eventType); - if (decoderEntry) { - const parsedMessage = decoderEntry.messageClass.decode(eventData); - if (parsedMessage) { - this.logEvent(eventType, eventId, parsedMessage); - decoderEntry.handler.call(this, eventId, parsedMessage); - } else { - console.log(`Unsupported event response ${eventType}`); - } - } else { - throw Error('no decoder'); - } - } catch (e) { - console.log(e); - } - } - - private onDeferredResponse(eventId: number, response: IBackendResponse) { - const def = this.deferredMap.get(eventId); - if (def) { - if (response.success) { - def.resolve(response); - } else { - def.reject(response.message); - } - } else { - console.log(`Can't find deferred for request ${eventId}`); - } - } - - private onSaveFileAndRegionAck(eventId: number, ack: CARTA.SaveFileAck | CARTA.ExportRegionAck) { - // to check the overwriteConfirmationRequired field, return the entire response instead of the message field - if (!ack.success) { - const def = this.deferredMap.get(eventId); - if (def) { - def.reject(ack); - } else { - console.log(`Can't find deferred for request ${eventId}`); - } - } - this.onDeferredResponse(eventId, ack); - } - - private onRegisterViewerAck(eventId: number, ack: CARTA.RegisterViewerAck) { - this.sessionId = ack.sessionId; - this.serverFeatureFlags = ack.serverFeatureFlags; - - // TelemetryService.Instance.addTelemetryEntry(TelemetryAction.Connection, {serverFeatureFlags: ack.serverFeatureFlags, platformInfo: ack.platformStrings}); - this.onDeferredResponse(eventId, ack); - } - - private onStartAnimationAck(eventId: number, ack: CARTA.StartAnimationAck) { - this.animationId = ack.success ? ack.animationId : INVALID_ANIMATION_ID; - this.onDeferredResponse(eventId, ack); - } - - private onStreamedRasterTileData(_eventId: number, rasterTileData: CARTA.RasterTileData) { - this.rasterTileStream.next(rasterTileData); - } - - private onStreamedRasterSync(_eventId: number, rasterTileSync: CARTA.RasterTileSync) { - this.rasterSyncStream.next(rasterTileSync); - } - - private onStreamedRegionHistogramData(_eventId: number, regionHistogramData: CARTA.RegionHistogramData) { - this.histogramStream.next(regionHistogramData); - } - - private onStreamedErrorData(_eventId: number, errorData: CARTA.ErrorData) { - this.errorStream.next(errorData); - } - - private onStreamedSpatialProfileData(_eventId: number, spatialProfileData: CARTA.SpatialProfileData) { - this.spatialProfileStream.next(spatialProfileData); - } - - private onStreamedSpectralProfileData(_eventId: number, spectralProfileData: CARTA.SpectralProfileData) { - this.spectralProfileStream.next(spectralProfileData); - } - - private onStreamedRegionStatsData(_eventId: number, regionStatsData: CARTA.RegionStatsData) { - this.statsStream.next(regionStatsData); - } - - private onStreamedContourData(_eventId: number, contourData: CARTA.ContourImageData) { - this.contourStream.next(contourData); - } - - private onStreamedVectorOverlayData(_eventId: number, overlayData: CARTA.VectorOverlayTileData) { - this.vectorTileStream.next(overlayData); - } - - private onScriptingRequest(_eventId: number, scriptingRequest: CARTA.ScriptingRequest) { - this.scriptingStream.next(scriptingRequest); - } - - private onStreamedCatalogData(_eventId: number, catalogFilter: CARTA.CatalogFilterResponse) { - this.catalogStream.next(catalogFilter); - } - - private onStreamedMomentProgress(_eventId: number, momentProgress: CARTA.MomentProgress) { - this.momentProgressStream.next(momentProgress); - } - - private onStreamedListProgress(_eventId: number, listProgress: CARTA.ListProgress) { - this.listProgressStream.next(listProgress); - } - - private onStreamedPvProgress(_eventId: number, pvProgress: CARTA.PvProgress) { - this.pvProgressStream.next(pvProgress); - } - - private onStreamedFittingProgress(_eventId: number, fittingProgress: CARTA.FittingProgress) { - this.fittingProgressStream.next(fittingProgress); - } - - private onStreamedPvPreviewData(_eventId: number, previewData: CARTA.PvPreviewData) { - this.pvPreviewStream.next(previewData); - } - - private sendEvent(eventType: CARTA.EventType, payload: Uint8Array): boolean { - if (this.connection.readyState === WebSocket.OPEN) { - const eventData = new Uint8Array(8 + payload.byteLength); - const eventHeader16 = new Uint16Array(eventData.buffer, 0, 2); - const eventHeader32 = new Uint32Array(eventData.buffer, 4, 1); - eventHeader16[0] = eventType; - eventHeader16[1] = MessageController.IcdVersion; - eventHeader32[0] = this.eventCounter; - - eventData.set(payload, 8); - this.connection.send(eventData); - this.eventCounter++; - return true; - } else { - console.log('Error sending event'); - this.eventCounter++; - return false; - } - } - - private logEvent(eventType: CARTA.EventType, eventId: number, message: any, incoming: boolean = true) { - const eventName = CARTA.EventType[eventType]; - if (this.loggingEnabled) { - if (incoming) { - if (eventId === 0) { - this.messageReceiving(true); - // console.log(`<== ${eventName} [Stream]`); - } else { - this.messageReceiving(true); - // console.log(`<== ${eventName} [${eventId}]`); - } - } else { - // console.log(`${eventName} [${eventId}] ==>`); - } - // console.log(message); - // console.log("\n"); - } - } - - public messageReceiving(set?: boolean): number { - if (set) { - this.count = this.count + 1; - return this.count; - } else { - return this.count; - } - } -} diff --git a/src/performance/MyClient.ts b/src/performance/MyClient.ts deleted file mode 100644 index 9dbb4bc..0000000 --- a/src/performance/MyClient.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { CARTA } from 'carta-protobuf'; -import { MessageController, ConnectionStatus } from './MessageController'; -import { take } from 'rxjs/operators'; - -function checkConnection() { - const msgController = MessageController.Instance; - test('check connection', () => { - expect(msgController.connectionStatus).toBe(ConnectionStatus.ACTIVE); - }); -} - -function Stream(cartaType: any, InputNum?: number) { - return new Promise((resolve, reject) => { - const msgController = MessageController.Instance; - let count = 0; - switch (cartaType) { - case CARTA.RegionHistogramData: - let RegionHistogramData: CARTA.RegionHistogramData[] = []; - let resRegionHistogramData = msgController.histogramStream.pipe(take(InputNum)); - resRegionHistogramData.subscribe((data) => { - RegionHistogramData.push(data); - count++; - if (count === InputNum) { - resolve(RegionHistogramData); - } - }); - break; - case CARTA.SpatialProfileData: - let SpatialProfileData: CARTA.SpatialProfileData[] = []; - let resSpatialProfileData = msgController.spatialProfileStream.pipe(take(InputNum)); - resSpatialProfileData.subscribe((data) => { - SpatialProfileData.push(data); - count++; - if (count === InputNum) { - resolve(SpatialProfileData); - } - }); - break; - case CARTA.RasterTileData: - let ack: any[] = []; - let ex1 = msgController.rasterSyncStream.pipe(take(2)); - ex1.subscribe((data) => { - count++; - ack.push(data); - if (data.endSync && count === InputNum) { - resolve(ack); - } - }); - let ex2 = msgController.rasterTileStream.pipe(take(InputNum - 2)); - ex2.subscribe((data) => { - count++; - ack.push(data); - }); - break; - case CARTA.ListProgress: - let ListProgressData: any[] = []; - let resListProgressData = msgController.listProgressStream.pipe(take(InputNum)); - resListProgressData.subscribe((data) => { - ListProgressData.push(data); - count++; - if (count === InputNum) { - resolve(ListProgressData); - } - }); - break; - case CARTA.MomentProgress: - let MomentProgressData: any[] = []; - let resMomentProgressData = msgController.momentProgressStream.pipe(take(InputNum)); - resMomentProgressData.subscribe((data) => { - MomentProgressData.push(data); - count++; - if (count === InputNum) { - resolve(MomentProgressData); - } - }); - break; - case CARTA.ErrorData: - let ErrorData: CARTA.IErrorData[] = []; - let resErrorData = msgController.errorStream.pipe(take(InputNum)); - resErrorData.subscribe((data) => { - ErrorData.push(data); - count++; - if (count === InputNum) { - resolve(ErrorData); - } - }); - break; - case CARTA.ContourImageData: - let ContourImageData: CARTA.ContourImageData[] = []; - let resContourImageData = msgController.contourStream.pipe(take(InputNum)); - resContourImageData.subscribe((data) => { - ContourImageData.push(data); - count++; - if (count === InputNum) { - resolve(ContourImageData); - } - }); - break; - case CARTA.ErrorData: - let ErrorStreamData: CARTA.ErrorData[] = []; - let resErrorStreamData = msgController.errorStream.pipe(take(InputNum)); - resErrorStreamData.subscribe((data) => { - ErrorStreamData.push(data); - count++; - if (count === InputNum) { - resolve(ErrorStreamData); - } - }); - break; - case CARTA.RegionStatsData: - let RegionStatsData: CARTA.RegionStatsData[] = []; - let resRegionStatsData = msgController.statsStream.pipe(take(InputNum)); - resRegionStatsData.subscribe((data) => { - RegionStatsData.push(data); - count++; - if (count === InputNum) { - resolve(RegionStatsData); - } - }); - break; - case CARTA.SpectralProfileData: - let SpectralProfileData: any[] = []; - let resSpectralProfileData = msgController.spectralProfileStream.subscribe({ - next: (data) => { - SpectralProfileData.push(data); - if (data.progress === 1) { - resolve(SpectralProfileData); - } - }, - }); - break; - case CARTA.CatalogFilterResponse: - let catalogStream: any[] = []; - let resCatalogStream = msgController.catalogStream.subscribe({ - next: (data) => { - catalogStream.push(data); - if (data.progress === 1) { - resolve(catalogStream); - } - }, - }); - break; - case CARTA.PvPreviewData: - let pvPreviewStream: any[] = []; - let resPvPreviewStream = msgController.pvPreviewStream.pipe(take(InputNum)); - resPvPreviewStream.subscribe((data) => { - pvPreviewStream.push(data); - count++; - if (count === InputNum) { - resolve(pvPreviewStream); - } - }); - break; - } - }); -} - -function ChannelMapStream(rasterTileDataLen: number, channels: number) { - return new Promise((resolve, reject) => { - const msgController = MessageController.Instance; - const rasterTileMsgLen = (rasterTileDataLen + 2) * channels; // # of RasterTileData + 2 RasterTileSync per channel - let count = 0; - let rasterTileMsgs: any[] = []; - let rasterTileSyncStream = msgController.rasterSyncStream.pipe(take(2 * channels)); - rasterTileSyncStream.subscribe((data) => { - count++; - rasterTileMsgs.push(data); - if (data.endSync && count === rasterTileMsgLen) { - resolve(rasterTileMsgs); - } - }); - let rasterTileDataStream = msgController.rasterTileStream.pipe(take(rasterTileDataLen * channels)); - rasterTileDataStream.subscribe((data) => { - count++; - rasterTileMsgs.push(data); - }); - }); -} - -export { checkConnection, Stream, ChannelMapStream }; diff --git a/src/performance/MyParsing.ts b/src/performance/MyParsing.ts deleted file mode 100644 index 589c1b8..0000000 --- a/src/performance/MyParsing.ts +++ /dev/null @@ -1,145 +0,0 @@ -import * as _ from 'lodash'; -import { CARTA } from 'carta-protobuf'; - -// order matters, since ... and .. both having .. (same for < and <=, > and >=) -export enum ComparisonOperator { - Equal = '==', - NotEqual = '!=', - LessorOrEqual = '<=', - Lesser = '<', - GreaterOrEqual = '>=', - Greater = '>', - RangeClosed = '...', - RangeOpen = '..', -} - -export function parseBoolean(value: string, defaultValue: boolean): boolean { - if (value === 'true') { - return true; - } else if (value === 'false') { - return false; - } else { - return defaultValue; - } -} - -export function parseNumber(val: number, initVal: number): number { - if (isFinite(val)) { - return val; - } else { - return initVal; - } -} - -export function trimFitsComment(val: string): string { - if (!val) { - return ''; - } - - // replace standard Fits header comments - return val.replace(/\s\/\s?.*$/, ''); -} - -export function mapToObject(map: Map) { - const obj: { [k: string]: T } = {}; - map.forEach((value, key) => { - obj[key.toString()] = value; - }); - console.log(obj); - return obj; -} - -export function findDeep(obj: any, pred: (obj: any) => boolean) { - if (pred(obj)) { - return [obj]; - } - return _.flatten( - _.map(obj, (child) => { - return typeof child === 'object' ? findDeep(child, pred) : []; - }) - ); -} - -// parsing filter string for TableComponent filter function -function getNumberFromFilterString(filterString: string): number { - const n = filterString.replace(/[^0-9.+-.]+/g, ''); - if (n !== '') { - return Number(n); - } - return undefined; -} - -export function getComparisonOperatorAndValue(filterString: string): { - operator: CARTA.ComparisonOperator; - values: number[]; -} { - const filter = filterString.replace(/\s/g, ''); - let result = { operator: -1, values: [] }; - // order matters, since ... and .. both include .. (same for < and <=, > and >=) - for (const key of Object.keys(ComparisonOperator)) { - const operator = ComparisonOperator[key]; - const found = filter.includes(operator); - if (found) { - if (operator === ComparisonOperator.Equal) { - const equalTo = getNumberFromFilterString(filter); - if (equalTo !== undefined) { - result.operator = CARTA.ComparisonOperator.Equal; - result.values.push(equalTo); - } - return result; - } else if (operator === ComparisonOperator.NotEqual) { - const notEqualTo = getNumberFromFilterString(filter); - if (notEqualTo !== undefined) { - result.operator = CARTA.ComparisonOperator.NotEqual; - result.values.push(notEqualTo); - } - return result; - } else if (operator === ComparisonOperator.Lesser) { - const lessThan = getNumberFromFilterString(filter); - if (lessThan !== undefined) { - result.operator = CARTA.ComparisonOperator.Lesser; - result.values.push(lessThan); - } - return result; - } else if (operator === ComparisonOperator.LessorOrEqual) { - const lessThanOrEqualTo = getNumberFromFilterString(filter); - if (lessThanOrEqualTo !== undefined) { - result.values.push(lessThanOrEqualTo); - result.operator = CARTA.ComparisonOperator.LessorOrEqual; - } - return result; - } else if (operator === ComparisonOperator.Greater) { - const greaterThan = getNumberFromFilterString(filter); - if (greaterThan !== undefined) { - result.operator = CARTA.ComparisonOperator.Greater; - result.values.push(greaterThan); - } - return result; - } else if (operator === ComparisonOperator.GreaterOrEqual) { - const greaterThanOrEqualTo = getNumberFromFilterString(filter); - if (greaterThanOrEqualTo !== undefined) { - result.values.push(greaterThanOrEqualTo); - result.operator = CARTA.ComparisonOperator.GreaterOrEqual; - } - return result; - } else if (operator === ComparisonOperator.RangeOpen) { - const fromTo = filter.split(ComparisonOperator.RangeOpen, 2); - if (fromTo[0] !== '' && fromTo[1] !== '') { - result.values.push(Number(fromTo[0])); - result.values.push(Number(fromTo[1])); - result.operator = CARTA.ComparisonOperator.RangeOpen; - } - return result; - } else if (operator === ComparisonOperator.RangeClosed) { - const betweenAnd = filter.split(ComparisonOperator.RangeClosed, 2); - if (betweenAnd[0] !== '' && betweenAnd[1] !== '') { - result.values.push(Number(betweenAnd[0])); - result.values.push(Number(betweenAnd[1])); - result.operator = CARTA.ComparisonOperator.RangeClosed; - } - return result; - } - } - } - return result; -} diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts index 2b27fc2..3b544b2 100644 --- a/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts +++ b/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts @@ -1,8 +1,8 @@ import { CARTA } from 'carta-protobuf'; import * as Long from 'long'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; import { take } from 'rxjs/operators'; let connectTimeout = config.timeout.connection; diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts index af022d3..3d9b260 100644 --- a/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts +++ b/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts @@ -1,8 +1,8 @@ import { CARTA } from 'carta-protobuf'; import * as Long from 'long'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; import { take } from 'rxjs/operators'; let connectTimeout = config.timeout.connection; diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts index 498e749..dbfb15e 100644 --- a/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts +++ b/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts @@ -1,8 +1,8 @@ import { CARTA } from 'carta-protobuf'; import * as Long from 'long'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; import { take } from 'rxjs/operators'; let connectTimeout = config.timeout.connection; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts index 731d7c4..649e6d3 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts index d67b968..3a2dd00 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts index e20a287..de88ee3 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts index a5ae6fc..54789d7 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_CASA.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts index 39aff25..fe445e3 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_FITS.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts index 0e466df..07ab540 100644 --- a/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts +++ b/src/performance/PERF_CUBE_HISTOGRAM_HDF5.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts index deb6756..ada8139 100644 --- a/src/performance/PERF_LOAD_IMAGE_CASA.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_CASA.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts index 9793685..a2a5dfe 100644 --- a/src/performance/PERF_LOAD_IMAGE_FITS.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_FITS.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts index ce19c48..629be65 100644 --- a/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts +++ b/src/performance/PERF_LOAD_IMAGE_HDF5.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_MOMENTS_CASA.test.ts b/src/performance/PERF_MOMENTS_CASA.test.ts index 63c22b1..075bd03 100644 --- a/src/performance/PERF_MOMENTS_CASA.test.ts +++ b/src/performance/PERF_MOMENTS_CASA.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl = config.serverURL0; let testSubdirectory = config.path.performance; diff --git a/src/performance/PERF_MOMENTS_FITS.test.ts b/src/performance/PERF_MOMENTS_FITS.test.ts index f14cace..b24de7e 100644 --- a/src/performance/PERF_MOMENTS_FITS.test.ts +++ b/src/performance/PERF_MOMENTS_FITS.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl = config.serverURL0; let testSubdirectory = config.path.performance; diff --git a/src/performance/PERF_MOMENTS_HDF5.test.ts b/src/performance/PERF_MOMENTS_HDF5.test.ts index 6091cd2..00b2e6d 100644 --- a/src/performance/PERF_MOMENTS_HDF5.test.ts +++ b/src/performance/PERF_MOMENTS_HDF5.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl = config.serverURL0; let testSubdirectory = config.path.performance; diff --git a/src/performance/PERF_PV_CASA.test.ts b/src/performance/PERF_PV_CASA.test.ts index 877a612..afc9ee0 100644 --- a/src/performance/PERF_PV_CASA.test.ts +++ b/src/performance/PERF_PV_CASA.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_PV_FITS.test.ts b/src/performance/PERF_PV_FITS.test.ts index bb43cd5..2c751d1 100644 --- a/src/performance/PERF_PV_FITS.test.ts +++ b/src/performance/PERF_PV_FITS.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_PV_HDF5.test.ts b/src/performance/PERF_PV_HDF5.test.ts index dd7f718..fba507b 100644 --- a/src/performance/PERF_PV_HDF5.test.ts +++ b/src/performance/PERF_PV_HDF5.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts index 090fe6f..1d663fc 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_CASA.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts index bf0fa9f..da60ad7 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_FITS.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts index 4bbf056..0bbbbdb 100644 --- a/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts +++ b/src/performance/PERF_RASTER_TILE_DATA_HDF5.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts index 239df2a..6bdfa5f 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_CASA.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts index 68ddd28..95799b4 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_FITS.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts index 4979480..52f419c 100644 --- a/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts +++ b/src/performance/PERF_REGION_SPECTRAL_PROFILE_HDF5.test.ts @@ -1,7 +1,7 @@ import { CARTA } from 'carta-protobuf'; -import { checkConnection, Stream } from './MyClient'; -import { MessageController } from './MessageController'; -import config from './config.json'; +import { checkConnection, Stream } from '../test/MyClient'; +import { MessageController } from '../test/MessageController'; +import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; diff --git a/src/performance/config.json b/src/performance/config.json deleted file mode 100644 index 0c949a9..0000000 --- a/src/performance/config.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "serverURL0": "ws://127.0.0.1:3002", - "icdVersion": 30, - "path": { - "root": ".", - "base": "$BASE", - "directory": ".", - "QA": "set_QA", - "casa_varients": "set_casaImageVarients", - "region": "set_QA/regionTest", - "performance": "set_QA_performance", - "catalogArtificial": "set_QA/carta_artificial_catalog", - "catalogLarge": "set_QA/set_cosmos", - "save": "set_QA/tmp", - "save_rhel9": "set_QA/tmp/rhel9", - "concat_stokes": "set_StokesCube", - "large_files": "set_QA/set_lotsFiles2", - "compressed_fits": "set_compressed_fits" - }, - "performance": { - "openFile": 16000, - "readFile": 5000, - "playContour": 12000, - "setSpectralReqTimeout": 5000, - "momentTimeout": 400000, - "pvTimeout": 200000 - }, - "timeout": { - "connection": 1100, - "listFile": 1200, - "openFile": 6000, - "readFile": 6000, - "saveFile": 3000, - "readLargeImage": 90000, - "changeChannel": 3000, - "playImages": 8000, - "renderImages": 5000, - "contour": 30000, - "cubeHistogram": 160000, - "cancel": 5000, - "concurrent": 7000, - "messageEvent": 500, - "mouseEvent": 3000, - "cursor": 500, - "region": 5000, - "import": 500, - "export": 500, - "resume": 3000, - "spatralProfile": 500, - "spectralProfile": 2000, - "sleep": 3000, - "playAnimator": 30000, - "wasm": 3000, - "moment": 5300, - "momentLargeCube": 50000, - "spectralLineRequest": 3000, - "spectralLineRequestWide": 60000, - "openCatalogLarge": 100000, - "concatStokes": 3000, - "openLargeFiles": 60000, - "pvRequest": 60000, - "imageFitting": 100000, - "vectorOverlay": 6000, - "firstHistogramCancellation": 100000, - "dragManyNumberBins": 100000 - }, - "repeat": { - "concurrent": 10, - "cursor": 10, - "image": 10, - "animation": 100, - "setHistogram": 200 - }, - "log": { - "error": false, - "warning": true, - "event": false - } -} diff --git a/src/test/config.json b/src/test/config.json index 69b8766..0c949a9 100644 --- a/src/test/config.json +++ b/src/test/config.json @@ -17,6 +17,14 @@ "large_files": "set_QA/set_lotsFiles2", "compressed_fits": "set_compressed_fits" }, + "performance": { + "openFile": 16000, + "readFile": 5000, + "playContour": 12000, + "setSpectralReqTimeout": 5000, + "momentTimeout": 400000, + "pvTimeout": 200000 + }, "timeout": { "connection": 1100, "listFile": 1200, From 5b5c4438c223d7dcefcbe5b8704e40166e06b98d Mon Sep 17 00:00:00 2001 From: Cheng-Chin Chiang Date: Wed, 3 Dec 2025 15:18:01 +0800 Subject: [PATCH 7/7] Update the timeout configuration for the performance tests. --- src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts | 2 +- src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts | 2 +- src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts | 2 +- src/performance/PERF_CONTOUR_DATA_Mode0.test.ts | 2 +- src/performance/PERF_CONTOUR_DATA_Mode1.test.ts | 2 +- src/performance/PERF_CONTOUR_DATA_Mode2.test.ts | 2 +- src/test/config.json | 1 + 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts index 3b544b2..711bc4b 100644 --- a/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts +++ b/src/performance/PERF_ANIMATOR_CONTOUR_CASA.test.ts @@ -10,7 +10,7 @@ let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; let openFileTimeout: number = config.timeout.openFile; let readFileTimeout: number = config.timeout.readFile; -let playAnimatorTimeout = config.timeout.playAnimator; +let playAnimatorTimeout = config.performance.playAnimator; interface AssertItem { registerViewer: CARTA.IRegisterViewer; diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts index 3d9b260..f69dcb1 100644 --- a/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts +++ b/src/performance/PERF_ANIMATOR_CONTOUR_FITS.test.ts @@ -10,7 +10,7 @@ let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; let openFileTimeout: number = config.timeout.openFile; let readFileTimeout: number = config.timeout.readFile; -let playAnimatorTimeout = config.timeout.playAnimator; +let playAnimatorTimeout = config.performance.playAnimator; interface AssertItem { registerViewer: CARTA.IRegisterViewer; diff --git a/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts b/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts index dbfb15e..c433cb7 100644 --- a/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts +++ b/src/performance/PERF_ANIMATOR_CONTOUR_HDF5.test.ts @@ -10,7 +10,7 @@ let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; let openFileTimeout: number = config.timeout.openFile; let readFileTimeout: number = config.timeout.readFile; -let playAnimatorTimeout = config.timeout.playAnimator; +let playAnimatorTimeout = config.performance.playAnimator; interface AssertItem { registerViewer: CARTA.IRegisterViewer; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts index 649e6d3..0a6575a 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode0.test.ts @@ -6,7 +6,7 @@ import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; let connectTimeout: number = config.timeout.connection; -let openFileTimeout: number = config.timeout.openFile; +let openFileTimeout: number = config.performance.openFile; let readFileTimeout: number = config.timeout.readFile; let playContourTimeout: number = config.performance.playContour; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts index 3a2dd00..ed3816d 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode1.test.ts @@ -6,7 +6,7 @@ import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; let connectTimeout: number = config.timeout.connection; -let openFileTimeout: number = config.timeout.openFile; +let openFileTimeout: number = config.performance.openFile; let readFileTimeout: number = config.timeout.readFile; let playContourTimeout: number = config.performance.playContour; diff --git a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts index de88ee3..a82413f 100644 --- a/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts +++ b/src/performance/PERF_CONTOUR_DATA_Mode2.test.ts @@ -6,7 +6,7 @@ import config from '../test/config.json'; let testServerUrl: string = config.serverURL0; let testSubdirectory: string = config.path.performance; let connectTimeout: number = config.timeout.connection; -let openFileTimeout: number = config.timeout.openFile; +let openFileTimeout: number = config.performance.openFile; let readFileTimeout: number = config.timeout.readFile; let playContourTimeout: number = config.performance.playContour; diff --git a/src/test/config.json b/src/test/config.json index 0c949a9..80bd405 100644 --- a/src/test/config.json +++ b/src/test/config.json @@ -21,6 +21,7 @@ "openFile": 16000, "readFile": 5000, "playContour": 12000, + "playAnimator": 300000, "setSpectralReqTimeout": 5000, "momentTimeout": 400000, "pvTimeout": 200000