diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index c417ec6e..d9eb76c1 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -15,3 +15,6 @@ c980f5875ba856d02ca8da6162f54f44793dcd16 # Scala Steward: Reformat with scalafmt 3.9.7 c9e07485ef29578e1088bb7f79253f45d7a14e4b + +# Scala Steward: Reformat with scalafmt 3.10.5 +92632dc93496fd92853961f05c5b0621978e481b diff --git a/.scalafmt.conf b/.scalafmt.conf index 933f9d9b..b095bdf4 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.10.3 +version = 3.10.5 runner.dialect = Scala213Source3 maxColumn = 100 indent.defnSite = 2 diff --git a/src/main/scala/com/advancedtelematic/director/Boot.scala b/src/main/scala/com/advancedtelematic/director/Boot.scala index 89e3985c..7af63662 100644 --- a/src/main/scala/com/advancedtelematic/director/Boot.scala +++ b/src/main/scala/com/advancedtelematic/director/Boot.scala @@ -17,14 +17,23 @@ import com.advancedtelematic.libats.http.VersionDirectives.versionHeaders import com.advancedtelematic.libats.http.monitoring.ServiceHealthCheck import com.advancedtelematic.libats.http.tracing.Tracing import com.advancedtelematic.libats.http.tracing.Tracing.ServerRequestTracing -import com.advancedtelematic.libats.http.{BootApp, BootAppDatabaseConfig, BootAppDefaultConfig, NamespaceDirectives} +import com.advancedtelematic.libats.http.{ + BootApp, + BootAppDatabaseConfig, + BootAppDefaultConfig, + NamespaceDirectives +} import com.advancedtelematic.libats.messaging.{MessageBus, MessageBusPublisher} import com.advancedtelematic.libats.messaging_datatype.DataType.DeviceId import com.advancedtelematic.libats.slick.db.{CheckMigrations, DatabaseSupport} import com.advancedtelematic.libats.slick.monitoring.{DatabaseMetrics, DbHealthResource} import com.advancedtelematic.libtuf_server.keyserver.KeyserverHttpClient import com.advancedtelematic.metrics.prometheus.PrometheusMetricsSupport -import com.advancedtelematic.metrics.{PekkoHttpConnectionMetrics, PekkoHttpRequestMetrics, MetricsSupport} +import com.advancedtelematic.metrics.{ + MetricsSupport, + PekkoHttpConnectionMetrics, + PekkoHttpRequestMetrics +} import com.codahale.metrics.MetricRegistry import com.typesafe.config.Config import org.bouncycastle.jce.provider.BouncyCastleProvider diff --git a/src/main/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListener.scala b/src/main/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListener.scala index b27186b0..fc2e1a33 100644 --- a/src/main/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListener.scala +++ b/src/main/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListener.scala @@ -98,13 +98,13 @@ class DeviceManifestReportedListener(globalConfig: Config)( Attributes .logLevels(onFinish = Attributes.logLevelWarning) ) - .wireTap(batch => batch.offsets.size ) + .wireTap(batch => batch.offsets.size) .via(committerFlow) } .watchTermination() { (_, done) => - done - .failed - .map { err => failureCount.inc() + done.failed + .map { err => + failureCount.inc() log.error("device-manifest-reported-listener failed", err) } NotUsed diff --git a/src/main/scala/com/advancedtelematic/director/daemon/TufTargetAddedListener.scala b/src/main/scala/com/advancedtelematic/director/daemon/TufTargetAddedListener.scala index b11679c2..c13292a4 100644 --- a/src/main/scala/com/advancedtelematic/director/daemon/TufTargetAddedListener.scala +++ b/src/main/scala/com/advancedtelematic/director/daemon/TufTargetAddedListener.scala @@ -2,8 +2,18 @@ package com.advancedtelematic.director.daemon import org.apache.pekko.http.scaladsl.model.Uri import org.apache.pekko.http.scaladsl.util.FastFuture -import com.advancedtelematic.director.data.DbDataType.{Assignment, AutoUpdateDefinition, EcuTarget, EcuTargetId} -import com.advancedtelematic.director.db.{AssignmentsRepositorySupport, AutoUpdateDefinitionRepositorySupport, EcuTargetsRepositorySupport, ProvisionedDeviceRepositorySupport} +import com.advancedtelematic.director.data.DbDataType.{ + Assignment, + AutoUpdateDefinition, + EcuTarget, + EcuTargetId +} +import com.advancedtelematic.director.db.{ + AssignmentsRepositorySupport, + AutoUpdateDefinitionRepositorySupport, + EcuTargetsRepositorySupport, + ProvisionedDeviceRepositorySupport +} import com.advancedtelematic.libats.data.DataType.{AutoUpdateId, Namespace} import com.advancedtelematic.libats.messaging.MsgOperation.MsgOperation import com.advancedtelematic.libtuf_server.data.Messages.TufTargetAdded diff --git a/src/main/scala/com/advancedtelematic/director/daemon/UpdateSchedulerDaemon.scala b/src/main/scala/com/advancedtelematic/director/daemon/UpdateSchedulerDaemon.scala index 33cf5fb3..0e700c27 100644 --- a/src/main/scala/com/advancedtelematic/director/daemon/UpdateSchedulerDaemon.scala +++ b/src/main/scala/com/advancedtelematic/director/daemon/UpdateSchedulerDaemon.scala @@ -3,13 +3,16 @@ package com.advancedtelematic.director.daemon import cats.implicits.* import com.advancedtelematic.director.db.UpdateSchedulerDBIO import com.advancedtelematic.libats.messaging.MessageBusPublisher -import com.advancedtelematic.libats.messaging_datatype.Messages.{DeviceUpdateAssigned, DeviceUpdateEvent} +import com.advancedtelematic.libats.messaging_datatype.Messages.{ + DeviceUpdateAssigned, + DeviceUpdateEvent +} import org.slf4j.LoggerFactory import slick.jdbc.MySQLProfile.api.* import java.time.Instant import scala.concurrent.duration.* -import scala.concurrent.{ExecutionContext, Future, blocking} +import scala.concurrent.{blocking, ExecutionContext, Future} class UpdateSchedulerDaemon()( implicit db: Database, diff --git a/src/main/scala/com/advancedtelematic/director/data/Codecs.scala b/src/main/scala/com/advancedtelematic/director/data/Codecs.scala index 8ca781ea..6116ffb2 100644 --- a/src/main/scala/com/advancedtelematic/director/data/Codecs.scala +++ b/src/main/scala/com/advancedtelematic/director/data/Codecs.scala @@ -17,8 +17,8 @@ import com.advancedtelematic.director.http.{ RemoteCommandRequest, RemoteSessionRequest, UpdateDetailResponse, - UpdateReportedResult, UpdateEventResponse, + UpdateReportedResult, UpdateResponse, UpdateResultResponse } @@ -193,5 +193,7 @@ object Codecs { implicit val updateDetailResponseCodec: Codec[UpdateDetailResponse] = deriveCodec[UpdateDetailResponse] - implicit val updateEventResponseCodec: Codec[UpdateEventResponse] = deriveCodec[UpdateEventResponse] + implicit val updateEventResponseCodec: Codec[UpdateEventResponse] = + deriveCodec[UpdateEventResponse] + } diff --git a/src/main/scala/com/advancedtelematic/director/data/DataType.scala b/src/main/scala/com/advancedtelematic/director/data/DataType.scala index 08b97f8f..d96ce4e1 100644 --- a/src/main/scala/com/advancedtelematic/director/data/DataType.scala +++ b/src/main/scala/com/advancedtelematic/director/data/DataType.scala @@ -11,17 +11,41 @@ import com.advancedtelematic.director.data.DbDataType.Ecu import com.advancedtelematic.director.data.UptaneDataType.{Hashes, TargetImage} import com.advancedtelematic.director.deviceregistry.data.DataType.UpdateTagValue import com.advancedtelematic.director.deviceregistry.data.TagId -import com.advancedtelematic.libats.data.DataType.{Checksum, CorrelationId, HashMethod, Namespace, UpdateCorrelationId, ValidChecksum} +import com.advancedtelematic.libats.data.DataType.{ + Checksum, + CorrelationId, + HashMethod, + Namespace, + UpdateCorrelationId, + ValidChecksum +} import com.advancedtelematic.libats.data.UUIDKey.{UUIDKey, UUIDKeyObj, UuidKeyObjTimeBased} import com.advancedtelematic.libats.data.PaginationResult import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, EcuIdentifier} import com.advancedtelematic.libats.messaging_datatype.MessageLike import com.advancedtelematic.libats.messaging_datatype.Messages.EcuAndHardwareId import com.advancedtelematic.libtuf.crypt.CanonicalJson.* -import com.advancedtelematic.libtuf.data.ClientDataType.{ClientHashes, MetaPath, TufRole, ValidMetaPath} +import com.advancedtelematic.libtuf.data.ClientDataType.{ + ClientHashes, + MetaPath, + TufRole, + ValidMetaPath +} import com.advancedtelematic.libtuf.data.TufDataType.RoleType.RoleType -import com.advancedtelematic.libtuf.data.TufDataType.{HardwareIdentifier, JsonSignedPayload, KeyType, RepoId, SignedPayload, TargetFilename, TargetName, TufKey} -import com.advancedtelematic.libtuf.data.ValidatedString.{ValidatedString, ValidatedStringValidation} +import com.advancedtelematic.libtuf.data.TufDataType.{ + HardwareIdentifier, + JsonSignedPayload, + KeyType, + RepoId, + SignedPayload, + TargetFilename, + TargetName, + TufKey +} +import com.advancedtelematic.libtuf.data.ValidatedString.{ + ValidatedString, + ValidatedStringValidation +} import com.advancedtelematic.libtuf_server.crypto.Sha256Digest import com.advancedtelematic.libtuf_server.repo.server.DataType.SignedRole import eu.timepit.refined.api.Refined @@ -47,18 +71,17 @@ object DbDataType { ecuId: EcuIdentifier, targetName: TargetName) - final case class DeviceKnownState( - deviceId: DeviceId, - primaryEcu: EcuIdentifier, - ecuStatus: Map[EcuIdentifier, Option[EcuTargetId]], - ecuTargets: Map[EcuTargetId, EcuTarget], - currentAssignments: Set[Assignment], - processedAssignments: Set[ProcessedAssignment], - // scheduledUpdates: Set[ScheduledUpdate], - // scheduledUpdatesEcuTargetIds: Map[TargetSpecId, Seq[EcuTargetId]], - updates: Set[Update], - updatesTargetIds: Map[TargetSpecId, Seq[EcuTargetId]], - generatedMetadataOutdated: Boolean) + final case class DeviceKnownState(deviceId: DeviceId, + primaryEcu: EcuIdentifier, + ecuStatus: Map[EcuIdentifier, Option[EcuTargetId]], + ecuTargets: Map[EcuTargetId, EcuTarget], + currentAssignments: Set[Assignment], + processedAssignments: Set[ProcessedAssignment], + // scheduledUpdates: Set[ScheduledUpdate], + // scheduledUpdatesEcuTargetIds: Map[TargetSpecId, Seq[EcuTargetId]], + updates: Set[Update], + updatesTargetIds: Map[TargetSpecId, Seq[EcuTargetId]], + generatedMetadataOutdated: Boolean) final case class Device(ns: Namespace, id: DeviceId, @@ -299,7 +322,7 @@ object Messages { object DataType { import enumeratum.* - + final case class TargetItemCustomEcuData(hardwareId: HardwareIdentifier) final case class TargetItemCustom(uri: Option[Uri], @@ -349,8 +372,7 @@ object DataType { createdAt: Instant, scheduledFor: Option[Instant], status: Update.Status, - completedAt: Option[Instant] = None, - ) + completedAt: Option[Instant] = None) object Update { @@ -449,4 +471,5 @@ object ClientDataType { // (1) safe because Refined checks Regex def tagValue: String = value.value.split("=")(1) } + } diff --git a/src/main/scala/com/advancedtelematic/director/db/DbDebug.scala b/src/main/scala/com/advancedtelematic/director/db/DbDebug.scala index 6d67c730..56280a69 100644 --- a/src/main/scala/com/advancedtelematic/director/db/DbDebug.scala +++ b/src/main/scala/com/advancedtelematic/director/db/DbDebug.scala @@ -118,7 +118,8 @@ class DirectorDbDebug()(implicit val db: Database, ec: ExecutionContext) { "device_manifests", readTable( "device_manifests", - id => sql"""select * from device_manifests where device_id = $id order by received_at desc limit 20""" + id => + sql"""select * from device_manifests where device_id = $id order by received_at desc limit 20""" ) ) ) diff --git a/src/main/scala/com/advancedtelematic/director/db/DeviceRegistration.scala b/src/main/scala/com/advancedtelematic/director/db/DeviceRegistration.scala index bb361845..53af8fd2 100644 --- a/src/main/scala/com/advancedtelematic/director/db/DeviceRegistration.scala +++ b/src/main/scala/com/advancedtelematic/director/db/DeviceRegistration.scala @@ -2,7 +2,11 @@ package com.advancedtelematic.director.db import org.apache.pekko.http.scaladsl.util.FastFuture import cats.implicits.toShow -import com.advancedtelematic.director.data.AdminDataType.{EcuInfoImage, EcuInfoResponse, RegisterEcu} +import com.advancedtelematic.director.data.AdminDataType.{ + EcuInfoImage, + EcuInfoResponse, + RegisterEcu +} import com.advancedtelematic.director.data.UptaneDataType.Hashes import com.advancedtelematic.director.db.ProvisionedDeviceRepository.DeviceCreateResult import com.advancedtelematic.director.db.deviceregistry.{DeviceRepository, EcuReplacementRepository} diff --git a/src/main/scala/com/advancedtelematic/director/db/Schema.scala b/src/main/scala/com/advancedtelematic/director/db/Schema.scala index 730c6fb6..42ffbc55 100644 --- a/src/main/scala/com/advancedtelematic/director/db/Schema.scala +++ b/src/main/scala/com/advancedtelematic/director/db/Schema.scala @@ -7,7 +7,14 @@ import com.advancedtelematic.libats.data.DataType.{Checksum, CorrelationId, Name import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, EcuIdentifier} import com.advancedtelematic.libats.slick.db.SlickCirceMapper.jsonMapper import com.advancedtelematic.libtuf.data.TufDataType.RoleType.RoleType -import com.advancedtelematic.libtuf.data.TufDataType.{HardwareIdentifier, JsonSignedPayload, RepoId, TargetFilename, TargetName, TufKey} +import com.advancedtelematic.libtuf.data.TufDataType.{ + HardwareIdentifier, + JsonSignedPayload, + RepoId, + TargetFilename, + TargetName, + TufKey +} import io.circe.Json import slick.jdbc.MySQLProfile.api.* import SlickMapping.* diff --git a/src/main/scala/com/advancedtelematic/director/db/SlickMapping.scala b/src/main/scala/com/advancedtelematic/director/db/SlickMapping.scala index 8c8c84da..2fe017a6 100644 --- a/src/main/scala/com/advancedtelematic/director/db/SlickMapping.scala +++ b/src/main/scala/com/advancedtelematic/director/db/SlickMapping.scala @@ -7,7 +7,10 @@ import com.advancedtelematic.libats.data.DataType.HashMethod import com.advancedtelematic.libats.data.DataType.HashMethod.HashMethod import com.advancedtelematic.libats.slick.codecs.SlickEnumeratum.enumeratumMapper import com.advancedtelematic.libats.slick.db.SlickCirceMapper -import com.advancedtelematic.libtuf.data.ValidatedString.{ValidatedString, ValidatedStringValidation} +import com.advancedtelematic.libtuf.data.ValidatedString.{ + ValidatedString, + ValidatedStringValidation +} import slick.jdbc.MySQLProfile.api.* import java.time.Instant diff --git a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/DbOps.scala b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/DbOps.scala index 554539f6..d435eca4 100644 --- a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/DbOps.scala +++ b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/DbOps.scala @@ -7,7 +7,7 @@ import com.advancedtelematic.director.deviceregistry.data.{DeviceSortBy, GroupSo import com.advancedtelematic.director.deviceregistry.data.SortDirection.SortDirection import Schema.DeviceTable import GroupInfoRepository.GroupInfoTable -import com.advancedtelematic.libats.data.PaginationResult.{Offset, Limit} +import com.advancedtelematic.libats.data.PaginationResult.{Limit, Offset} import slick.ast.Ordering import slick.jdbc.MySQLProfile.api.* import slick.lifted.ColumnOrdered diff --git a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/EcuReplacementRepository.scala b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/EcuReplacementRepository.scala index 4f5622f6..7edaa6b9 100644 --- a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/EcuReplacementRepository.scala +++ b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/EcuReplacementRepository.scala @@ -10,7 +10,12 @@ import com.advancedtelematic.libats.data.PaginationResult import com.advancedtelematic.libats.data.PaginationResult.{Limit, Offset} import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, EcuIdentifier} import com.advancedtelematic.libats.messaging_datatype.MessageCodecs.ecuReplacementCodec -import com.advancedtelematic.libats.messaging_datatype.Messages.{EcuAndHardwareId, EcuReplaced, EcuReplacement, EcuReplacementFailed} +import com.advancedtelematic.libats.messaging_datatype.Messages.{ + EcuAndHardwareId, + EcuReplaced, + EcuReplacement, + EcuReplacementFailed +} import com.advancedtelematic.libats.slick.codecs.SlickRefined.refinedMappedType import com.advancedtelematic.libats.slick.db.SlickExtensions.javaInstantMapping import com.advancedtelematic.libats.slick.db.SlickResultExtensions.* diff --git a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupInfoRepository.scala b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupInfoRepository.scala index d7a8c724..078e978b 100644 --- a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupInfoRepository.scala +++ b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupInfoRepository.scala @@ -8,7 +8,13 @@ package com.advancedtelematic.director.db.deviceregistry -import com.advancedtelematic.director.deviceregistry.data.{Group, GroupExpression, GroupName, GroupType, TagId} +import com.advancedtelematic.director.deviceregistry.data.{ + Group, + GroupExpression, + GroupName, + GroupType, + TagId +} import com.advancedtelematic.director.deviceregistry.data.Group.GroupId import com.advancedtelematic.director.deviceregistry.data.GroupSortBy.GroupSortBy diff --git a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupMemberRepository.scala b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupMemberRepository.scala index 4ea0c182..647136bd 100644 --- a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupMemberRepository.scala +++ b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/GroupMemberRepository.scala @@ -17,7 +17,14 @@ import com.advancedtelematic.libats.slick.db.SlickUUIDKey.* import com.advancedtelematic.director.http.deviceregistry.Errors.MemberAlreadyExists import com.advancedtelematic.director.deviceregistry.data.DataType.HibernationStatus import com.advancedtelematic.director.deviceregistry.data.Group.GroupId -import com.advancedtelematic.director.deviceregistry.data.{Device, DeviceDB, GroupExpression, GroupExpressionAST, GroupType, TagId} +import com.advancedtelematic.director.deviceregistry.data.{ + Device, + DeviceDB, + GroupExpression, + GroupExpressionAST, + GroupType, + TagId +} import DbOps.* import com.advancedtelematic.director.http.deviceregistry.Errors import com.advancedtelematic.libats.data.PaginationResult.{Limit, Offset} diff --git a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstallationReportRepository.scala b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstallationReportRepository.scala index 95c70dc0..74798d07 100644 --- a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstallationReportRepository.scala +++ b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstallationReportRepository.scala @@ -5,8 +5,16 @@ import cats.implicits.toShow import java.time.Instant import com.advancedtelematic.libats.data.DataType.{CorrelationId, ResultCode} import com.advancedtelematic.libats.data.PaginationResult -import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, EcuIdentifier, EcuInstallationReport} -import com.advancedtelematic.director.deviceregistry.data.DataType.{DeviceInstallationResult, EcuInstallationResult, InstallationStat} +import com.advancedtelematic.libats.messaging_datatype.DataType.{ + DeviceId, + EcuIdentifier, + EcuInstallationReport +} +import com.advancedtelematic.director.deviceregistry.data.DataType.{ + DeviceInstallationResult, + EcuInstallationResult, + InstallationStat +} import com.advancedtelematic.libats.data.PaginationResult.{Limit, Offset} import io.circe.Json import slick.jdbc.MySQLProfile.api.* @@ -131,12 +139,15 @@ object InstallationReportRepository { import cats.syntax.either.* - def fetchManyDevicesInstallationResults(ids: Set[(DeviceId, CorrelationId)]): DBIO[Vector[DeviceInstallationResult]] = { - val idsStr = ids.map { case (d, c) => s"(${d.show}, ${c.toString})"}.mkString(",") + def fetchManyDevicesInstallationResults( + ids: Set[(DeviceId, CorrelationId)]): DBIO[Vector[DeviceInstallationResult]] = { + val idsStr = ids.map { case (d, c) => s"(${d.show}, ${c.toString})" }.mkString(",") implicit val getDeviceInstallationResult: GetResult[DeviceInstallationResult] = GetResult { r => DeviceInstallationResult( - correlationId = CorrelationId.fromString(r.nextString()).valueOr(err => throw new IllegalArgumentException(err)), + correlationId = CorrelationId + .fromString(r.nextString()) + .valueOr(err => throw new IllegalArgumentException(err)), resultCode = ResultCode(r.nextString()), deviceId = DeviceId(java.util.UUID.fromString(r.nextString())), success = r.nextBoolean(), @@ -150,14 +161,16 @@ object InstallationReportRepository { """.as[DeviceInstallationResult] } - def fetchManyByDevice(deviceId: DeviceId, correlationIds: Set[CorrelationId]): DBIO[Seq[DeviceInstallationResult]] = + def fetchManyByDevice(deviceId: DeviceId, + correlationIds: Set[CorrelationId]): DBIO[Seq[DeviceInstallationResult]] = deviceInstallationResults .filter(_.deviceUuid === deviceId) .filter(_.correlationId.inSet(correlationIds)) .result - def fetchDeviceInstallationResultByCorrelationId(deviceId: DeviceId, - correlationId: CorrelationId): DBIO[Option[DeviceInstallationResult]] = + def fetchDeviceInstallationResultByCorrelationId( + deviceId: DeviceId, + correlationId: CorrelationId): DBIO[Option[DeviceInstallationResult]] = deviceInstallationResults .filter(_.deviceUuid === deviceId) .filter(_.correlationId === correlationId) diff --git a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstalledPackages.scala b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstalledPackages.scala index 25f8aa9d..ed9083be 100644 --- a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstalledPackages.scala +++ b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/InstalledPackages.scala @@ -77,10 +77,7 @@ object InstalledPackages { ) .transactionally - def installedOn(device: DeviceId, - nameContains: Option[String], - offset: Offset, - limit: Limit)( + def installedOn(device: DeviceId, nameContains: Option[String], offset: Offset, limit: Limit)( implicit ec: ExecutionContext): DBIO[PaginationResult[InstalledPackage]] = installedPackages .filter(_.device === device) @@ -162,10 +159,7 @@ object InstalledPackages { .map(r => (r._1.device, LiftedPackageId(r._1.name, r._1.version))) .result - def listAllWithPackageByName(ns: Namespace, - name: Name, - offset: Offset, - limit: Limit)( + def listAllWithPackageByName(ns: Namespace, name: Name, offset: Offset, limit: Limit)( implicit ec: ExecutionContext): DBIO[PaginationResult[PackageStat]] = { val query = installedPackages .filter(_.name === name) diff --git a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/SlickMappings.scala b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/SlickMappings.scala index ab6f36a4..27368117 100644 --- a/src/main/scala/com/advancedtelematic/director/db/deviceregistry/SlickMappings.scala +++ b/src/main/scala/com/advancedtelematic/director/db/deviceregistry/SlickMappings.scala @@ -10,9 +10,18 @@ package com.advancedtelematic.director.db.deviceregistry import com.advancedtelematic.libats.data.DataType.Namespace import com.advancedtelematic.libats.slick.codecs.{SlickEnumMapper, SlickEnumeratum} -import com.advancedtelematic.director.deviceregistry.data.DataType.{IndexedEventType, MqttStatus, PackageListItemCount} +import com.advancedtelematic.director.deviceregistry.data.DataType.{ + IndexedEventType, + MqttStatus, + PackageListItemCount +} import com.advancedtelematic.director.deviceregistry.data.Device.DeviceType -import com.advancedtelematic.director.deviceregistry.data.{CredentialsType, DeviceStatus, GroupType, PackageId} +import com.advancedtelematic.director.deviceregistry.data.{ + CredentialsType, + DeviceStatus, + GroupType, + PackageId +} import slick.jdbc.MySQLProfile.api.* object SlickMappings { @@ -59,4 +68,5 @@ object SlickMappings { // values from the enum implicit val deviceTypeMaper: slick.jdbc.MySQLProfile.BaseColumnType[DeviceType.Value] = MappedColumnType.base[DeviceType.Value, Int](_.id, DeviceType.apply) + } diff --git a/src/main/scala/com/advancedtelematic/director/deviceregistry/GroupMembership.scala b/src/main/scala/com/advancedtelematic/director/deviceregistry/GroupMembership.scala index 8442665b..ebff3c4c 100644 --- a/src/main/scala/com/advancedtelematic/director/deviceregistry/GroupMembership.scala +++ b/src/main/scala/com/advancedtelematic/director/deviceregistry/GroupMembership.scala @@ -1,12 +1,21 @@ package com.advancedtelematic.director.deviceregistry import org.apache.pekko.http.scaladsl.util.FastFuture -import com.advancedtelematic.director.db.deviceregistry.{GroupInfoRepository, GroupMemberRepository, SearchDBIO} +import com.advancedtelematic.director.db.deviceregistry.{ + GroupInfoRepository, + GroupMemberRepository, + SearchDBIO +} import com.advancedtelematic.libats.data.DataType.Namespace import com.advancedtelematic.libats.data.PaginationResult import com.advancedtelematic.director.deviceregistry.data.Group.GroupId import com.advancedtelematic.director.deviceregistry.data.GroupType.GroupType -import com.advancedtelematic.director.deviceregistry.data.{Group, GroupExpression, GroupName, GroupType} +import com.advancedtelematic.director.deviceregistry.data.{ + Group, + GroupExpression, + GroupName, + GroupType +} import com.advancedtelematic.director.http.deviceregistry.Errors import com.advancedtelematic.libats.data.PaginationResult.{Limit, Offset} import slick.jdbc.MySQLProfile.api.* diff --git a/src/main/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceUpdateEventListener.scala b/src/main/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceUpdateEventListener.scala index 1eb7e766..30a18ac1 100644 --- a/src/main/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceUpdateEventListener.scala +++ b/src/main/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceUpdateEventListener.scala @@ -80,16 +80,19 @@ class DeviceUpdateEventListener(messageBus: MessageBusPublisher)( private def wasCompleted(deviceId: DeviceId, correlationId: CorrelationId): Future[Boolean] = { val existingReport = - db.run(InstallationReportRepository.fetchDeviceInstallationResultByCorrelationId(deviceId, correlationId)) + db.run( + InstallationReportRepository + .fetchDeviceInstallationResultByCorrelationId(deviceId, correlationId) + ) existingReport.map(_.exists(_.success)) // if we handle success event - other should be ignored } private def handleEvent(event: DeviceUpdateEvent): Future[DeviceStatus] = event match { case msg: DeviceUpdateAssigned if msg.scheduledFor.isEmpty => FastFuture.successful(DeviceStatus.Outdated) - case _: DeviceUpdateAssigned => FastFuture.successful(DeviceStatus.UpdateScheduled) - case _: DeviceUpdateCanceled => FastFuture.successful(DeviceStatus.UpToDate) - case _: DeviceUpdateInFlight => FastFuture.successful(DeviceStatus.UpdatePending) + case _: DeviceUpdateAssigned => FastFuture.successful(DeviceStatus.UpdateScheduled) + case _: DeviceUpdateCanceled => FastFuture.successful(DeviceStatus.UpToDate) + case _: DeviceUpdateInFlight => FastFuture.successful(DeviceStatus.UpdatePending) case msg: DeviceUpdateCompleted => db.run { InstallationReportRepository diff --git a/src/main/scala/com/advancedtelematic/director/deviceregistry/data/DataType.scala b/src/main/scala/com/advancedtelematic/director/deviceregistry/data/DataType.scala index 2a86298e..6869f53f 100644 --- a/src/main/scala/com/advancedtelematic/director/deviceregistry/data/DataType.scala +++ b/src/main/scala/com/advancedtelematic/director/deviceregistry/data/DataType.scala @@ -146,17 +146,14 @@ object DataType { createdAtStart: Option[Instant], createdAtEnd: Option[Instant], hardwareId: Seq[HardwareIdentifier], - deviceTags: Set[TagSearchParam], + deviceTags: Set[TagSearchParam], sortBy: Option[DeviceSortBy], sortDirection: Option[SortDirection], offset: Offset, limit: Limit) { - if(deviceTags.nonEmpty) { - require( - oemId.isEmpty, - "Invalid parameters: oemId must be empty when searching by deviceTags" - ) + if (deviceTags.nonEmpty) { + require(oemId.isEmpty, "Invalid parameters: oemId must be empty when searching by deviceTags") require( nameContains.isEmpty, diff --git a/src/main/scala/com/advancedtelematic/director/deviceregistry/data/Device.scala b/src/main/scala/com/advancedtelematic/director/deviceregistry/data/Device.scala index 47c80812..a17cf093 100644 --- a/src/main/scala/com/advancedtelematic/director/deviceregistry/data/Device.scala +++ b/src/main/scala/com/advancedtelematic/director/deviceregistry/data/Device.scala @@ -152,13 +152,17 @@ object SortDirection { } object DeviceSortBy { + sealed abstract class DeviceSortBy(column: DeviceTable => Rep[?]) { + def columnName: String = column(TableQuery[Schema.DeviceTable].baseTableRow).toNode match { case Select(_, FieldSymbol(name)) => name case col => throw new IllegalArgumentException(s"$col cannot be used as device sort column") } + } + case object Name extends DeviceSortBy(_.deviceName) case object CreatedAt extends DeviceSortBy(_.createdAt) case object DeviceId extends DeviceSortBy(_.oemId) diff --git a/src/main/scala/com/advancedtelematic/director/http/AdminResource.scala b/src/main/scala/com/advancedtelematic/director/http/AdminResource.scala index af89565e..fb9e2890 100644 --- a/src/main/scala/com/advancedtelematic/director/http/AdminResource.scala +++ b/src/main/scala/com/advancedtelematic/director/http/AdminResource.scala @@ -304,7 +304,7 @@ class AdminResource(extractNamespace: Directive1[Namespace], val keyserverClient }, path("hardware_identifiers") { PaginationParameters { (offset, limit) => - val f = ecuRepository. findAllHardwareIdentifiers(ns, offset, limit) + val f = ecuRepository.findAllHardwareIdentifiers(ns, offset, limit) complete(f) } }, diff --git a/src/main/scala/com/advancedtelematic/director/http/Errors.scala b/src/main/scala/com/advancedtelematic/director/http/Errors.scala index de55e03b..94c74f1e 100644 --- a/src/main/scala/com/advancedtelematic/director/http/Errors.scala +++ b/src/main/scala/com/advancedtelematic/director/http/Errors.scala @@ -244,4 +244,5 @@ object Errors { StatusCodes.Conflict, s"The assignment cannot be cancelled using the assignments API because it belongs to an update. Use the updates API" ) + } diff --git a/src/main/scala/com/advancedtelematic/director/http/ForceHeader.scala b/src/main/scala/com/advancedtelematic/director/http/ForceHeader.scala index 6f2e2835..4394a759 100644 --- a/src/main/scala/com/advancedtelematic/director/http/ForceHeader.scala +++ b/src/main/scala/com/advancedtelematic/director/http/ForceHeader.scala @@ -1,6 +1,9 @@ package com.advancedtelematic.director.http -import org.apache.pekko.http.scaladsl.model.headers.{ModeledCustomHeader, ModeledCustomHeaderCompanion} +import org.apache.pekko.http.scaladsl.model.headers.{ + ModeledCustomHeader, + ModeledCustomHeaderCompanion +} import scala.util.Try diff --git a/src/main/scala/com/advancedtelematic/director/http/LegacyRoutes.scala b/src/main/scala/com/advancedtelematic/director/http/LegacyRoutes.scala index 558b555d..391daf66 100644 --- a/src/main/scala/com/advancedtelematic/director/http/LegacyRoutes.scala +++ b/src/main/scala/com/advancedtelematic/director/http/LegacyRoutes.scala @@ -11,7 +11,10 @@ import com.advancedtelematic.libats.data.DataType.{MultiTargetUpdateCorrelationI import com.advancedtelematic.libats.http.UUIDKeyPekko.* import com.advancedtelematic.libats.messaging.MessageBusPublisher import com.advancedtelematic.libats.messaging_datatype.DataType.DeviceId -import com.advancedtelematic.libats.messaging_datatype.Messages.{DeviceUpdateAssigned, DeviceUpdateEvent} +import com.advancedtelematic.libats.messaging_datatype.Messages.{ + DeviceUpdateAssigned, + DeviceUpdateEvent +} import com.github.pjfanning.pekkohttpcirce.FailFastCirceSupport.* import slick.jdbc.MySQLProfile.api.* diff --git a/src/main/scala/com/advancedtelematic/director/http/RootFetching.scala b/src/main/scala/com/advancedtelematic/director/http/RootFetching.scala index caf01697..38744190 100644 --- a/src/main/scala/com/advancedtelematic/director/http/RootFetching.scala +++ b/src/main/scala/com/advancedtelematic/director/http/RootFetching.scala @@ -6,7 +6,7 @@ import com.advancedtelematic.director.db.{ } import com.advancedtelematic.libats.data.DataType.Namespace import com.advancedtelematic.libtuf.data.ClientCodecs.* -import com.advancedtelematic.libtuf.data.TufDataType.{RepoId, JsonSignedPayload} +import com.advancedtelematic.libtuf.data.TufDataType.{JsonSignedPayload, RepoId} import com.advancedtelematic.libtuf_server.keyserver.KeyserverClient import io.circe.syntax.* diff --git a/src/main/scala/com/advancedtelematic/director/http/UpdateResource.scala b/src/main/scala/com/advancedtelematic/director/http/UpdateResource.scala index d19c0ea3..0eb85685 100644 --- a/src/main/scala/com/advancedtelematic/director/http/UpdateResource.scala +++ b/src/main/scala/com/advancedtelematic/director/http/UpdateResource.scala @@ -34,7 +34,9 @@ case class CreateUpdateRequest(targets: Map[HardwareIdentifier, TargetUpdateRequ case class CreateUpdateResult(affected: Seq[DeviceId], notAffected: Map[DeviceId, Map[EcuIdentifier, ErrorRepresentation]]) -case class UpdateReportedResult(resultCode: ResultCode, success: Boolean, description: Option[String]) +case class UpdateReportedResult(resultCode: ResultCode, + success: Boolean, + description: Option[String]) case class UpdateResultResponse(hardwareId: HardwareIdentifier, id: TargetFilename, diff --git a/src/main/scala/com/advancedtelematic/director/http/deviceregistry/DevicesResource.scala b/src/main/scala/com/advancedtelematic/director/http/deviceregistry/DevicesResource.scala index 5b3065d9..ea95ec20 100644 --- a/src/main/scala/com/advancedtelematic/director/http/deviceregistry/DevicesResource.scala +++ b/src/main/scala/com/advancedtelematic/director/http/deviceregistry/DevicesResource.scala @@ -26,7 +26,18 @@ import com.advancedtelematic.director.db.deviceregistry.DbOps.* import com.advancedtelematic.director.deviceregistry.data.* import com.advancedtelematic.director.deviceregistry.data.Codecs.* import com.advancedtelematic.director.deviceregistry.data.DataType.InstallationStatsLevel.InstallationStatsLevel -import com.advancedtelematic.director.deviceregistry.data.DataType.{DeviceCountParams, DeviceT, DevicesQuery, InstallationStatsLevel, RenameTagId, SearchParams, SetDevice, UpdateDevice, UpdateHibernationStatusRequest, UpdateTagValue} +import com.advancedtelematic.director.deviceregistry.data.DataType.{ + DeviceCountParams, + DeviceT, + DevicesQuery, + InstallationStatsLevel, + RenameTagId, + SearchParams, + SetDevice, + UpdateDevice, + UpdateHibernationStatusRequest, + UpdateTagValue +} import com.advancedtelematic.director.deviceregistry.data.Device.{ActiveDeviceCount, DeviceOemId} import com.advancedtelematic.director.deviceregistry.data.DeviceSortBy.DeviceSortBy import com.advancedtelematic.director.deviceregistry.data.DeviceStatus.DeviceStatus @@ -43,9 +54,17 @@ import com.advancedtelematic.libats.http.RefinedMarshallingSupport.* import com.advancedtelematic.libats.http.UUIDKeyPekko.* import com.advancedtelematic.libats.messaging.MessageBusPublisher import com.advancedtelematic.libats.messaging_datatype.DataType.DeviceId.* -import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, EcuIdentifier, Event, EventType} +import com.advancedtelematic.libats.messaging_datatype.DataType.{ + DeviceId, + EcuIdentifier, + Event, + EventType +} import com.advancedtelematic.libats.messaging_datatype.MessageCodecs.* -import com.advancedtelematic.libats.messaging_datatype.Messages.{DeleteDeviceRequest, DeviceEventMessage} +import com.advancedtelematic.libats.messaging_datatype.Messages.{ + DeleteDeviceRequest, + DeviceEventMessage +} import com.advancedtelematic.libats.slick.db.SlickExtensions.* import com.advancedtelematic.libtuf.data.TufDataType.HardwareIdentifier import io.circe.Json @@ -183,7 +202,7 @@ class DevicesResource(namespaceExtractor: Directive1[Namespace], Symbol("hardwareIds").as(CsvSeq[HardwareIdentifier]).?, Symbol("tags").as(CsvSeq[TagSearchParam]).?, Symbol("sortBy").as[DeviceSortBy].?, - Symbol("sortDirection").as[SortDirection].?, + Symbol("sortDirection").as[SortDirection].? ) & PaginationParameters).as( (oemId, grouped, @@ -225,7 +244,7 @@ class DevicesResource(namespaceExtractor: Directive1[Namespace], sortBy, sortDirection, offset, - limit, + limit ) ) { params => complete(for { @@ -300,9 +319,8 @@ class DevicesResource(namespaceExtractor: Directive1[Namespace], complete(db.run(SearchDBIO.countDevicesForExpression(ns, expression))) def getGroupsForDevice(uuid: DeviceId): Route = - PaginationParameters { - (offset, limit) => - complete(db.run(GroupMemberRepository.listGroupsForDevice(uuid, offset, limit))) + PaginationParameters { (offset, limit) => + complete(db.run(GroupMemberRepository.listGroupsForDevice(uuid, offset, limit))) } def updateInstalledSoftware(device: DeviceId): Route = @@ -315,10 +333,9 @@ class DevicesResource(namespaceExtractor: Directive1[Namespace], complete(db.run(InstalledPackages.getDevicesCount(pkg, ns))) def listPackagesOnDevice(device: DeviceId): Route = - (parameters( - Symbol("nameContains").as[String].? - ) & PaginationParameters) { (nameContains, offset, limit) => - complete(db.run(InstalledPackages.installedOn(device, nameContains, offset, limit))) + (parameters(Symbol("nameContains").as[String].?) & PaginationParameters) { + (nameContains, offset, limit) => + complete(db.run(InstalledPackages.installedOn(device, nameContains, offset, limit))) } implicit def offsetDateTimeUnmarshaller: FromStringUnmarshaller[OffsetDateTime] = @@ -337,9 +354,8 @@ class DevicesResource(namespaceExtractor: Directive1[Namespace], } def getDistinctPackages(ns: Namespace): Route = - PaginationParameters { - (offset, limit) => - complete(db.run(InstalledPackages.getInstalledForAllDevices(ns, offset, limit))) + PaginationParameters { (offset, limit) => + complete(db.run(InstalledPackages.getInstalledForAllDevices(ns, offset, limit))) } def findAffected(ns: Namespace): Route = @@ -351,15 +367,12 @@ class DevicesResource(namespaceExtractor: Directive1[Namespace], } def getPackageStats(ns: Namespace, name: PackageId.Name): Route = - PaginationParameters { - (offset, limit) => - val f = db.run(InstalledPackages.listAllWithPackageByName(ns, name, offset, limit)) - complete(f) + PaginationParameters { (offset, limit) => + val f = db.run(InstalledPackages.listAllWithPackageByName(ns, name, offset, limit)) + complete(f) } - def fetchInstallationHistory(deviceId: DeviceId, - offset: Offset, - limit: Limit): Route = + def fetchInstallationHistory(deviceId: DeviceId, offset: Offset, limit: Limit): Route = complete( db.run( EcuReplacementRepository diff --git a/src/main/scala/com/advancedtelematic/director/http/deviceregistry/GroupsResource.scala b/src/main/scala/com/advancedtelematic/director/http/deviceregistry/GroupsResource.scala index 5e1f95d5..71bc67f4 100644 --- a/src/main/scala/com/advancedtelematic/director/http/deviceregistry/GroupsResource.scala +++ b/src/main/scala/com/advancedtelematic/director/http/deviceregistry/GroupsResource.scala @@ -18,7 +18,11 @@ import org.apache.pekko.stream.scaladsl.Framing.FramingException import org.apache.pekko.stream.scaladsl.{Framing, Sink, Source} import org.apache.pekko.util.ByteString import cats.syntax.either.* -import com.advancedtelematic.director.db.deviceregistry.{DeviceRepository, GroupInfoRepository, GroupMemberRepository} +import com.advancedtelematic.director.db.deviceregistry.{ + DeviceRepository, + GroupInfoRepository, + GroupMemberRepository +} import com.advancedtelematic.director.deviceregistry.data.* import com.advancedtelematic.director.deviceregistry.data.Codecs.* import com.advancedtelematic.director.deviceregistry.data.DataType.UpdateHibernationStatusRequest @@ -103,9 +107,8 @@ class GroupsResource(namespaceExtractor: Directive1[Namespace], val groupMembership = new GroupMembership() def getDevicesInGroup(groupId: GroupId): Route = - PaginationParameters { - (offset, limit) => - complete(groupMembership.listDevices(groupId, offset, limit)) + PaginationParameters { (offset, limit) => + complete(groupMembership.listDevices(groupId, offset, limit)) } def listGroups(ns: Namespace, diff --git a/src/main/scala/com/advancedtelematic/director/repo/RemoteSessions.scala b/src/main/scala/com/advancedtelematic/director/repo/RemoteSessions.scala index f1ac4aeb..f2d60f06 100644 --- a/src/main/scala/com/advancedtelematic/director/repo/RemoteSessions.scala +++ b/src/main/scala/com/advancedtelematic/director/repo/RemoteSessions.scala @@ -70,7 +70,7 @@ class RemoteSessions(keyserverClient: KeyserverClient)( case Some(rs) => rs.copy(remote_commands = Some(remoteCommands)) case None => - RemoteSessionsRole ( + RemoteSessionsRole( remote_sessions = RemoteSessionsPayload.empty, remote_commands = Some(remoteCommands), version = 1, diff --git a/src/test/scala/com/advancedtelematic/director/client/FakeKeyserverClient.scala b/src/test/scala/com/advancedtelematic/director/client/FakeKeyserverClient.scala index d2d5afb6..b8d8d2e5 100644 --- a/src/test/scala/com/advancedtelematic/director/client/FakeKeyserverClient.scala +++ b/src/test/scala/com/advancedtelematic/director/client/FakeKeyserverClient.scala @@ -103,10 +103,11 @@ class FakeKeyserverClient extends KeyserverClient { }.flatMap { role => val expireNotBefore = _expireNotBefore.getOrElse(role.expires) - val role2 = if(role.expires.isBefore(expireNotBefore)) - role.copy(expires = expireNotBefore) - else - role + val role2 = + if (role.expires.isBefore(expireNotBefore)) + role.copy(expires = expireNotBefore) + else + role sign(repoId, role2).map { jsonSigned => SignedPayload(jsonSigned.signatures, role2, jsonSigned.json) diff --git a/src/test/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListenerSpec.scala b/src/test/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListenerSpec.scala index 73d04eba..72d2037f 100644 --- a/src/test/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListenerSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/daemon/DeviceManifestReportedListenerSpec.scala @@ -217,9 +217,7 @@ class DeviceManifestReportedListenerSpec jsonObject = obj => obj.toMap.map { case ("signed", signed) => - "signed" -> signed.deepMerge( - Json.obj("report_counter" -> newValue.asJson) - ) + "signed" -> signed.deepMerge(Json.obj("report_counter" -> newValue.asJson)) case ("signatures", _) => "signatures" -> Json.arr(Json.obj("sig" -> newValue.asJson)) case (key, value) => diff --git a/src/test/scala/com/advancedtelematic/director/data/Generators.scala b/src/test/scala/com/advancedtelematic/director/data/Generators.scala index 319ecf20..776721dd 100644 --- a/src/test/scala/com/advancedtelematic/director/data/Generators.scala +++ b/src/test/scala/com/advancedtelematic/director/data/Generators.scala @@ -3,12 +3,47 @@ package com.advancedtelematic.director.data import org.scalacheck.Gen import GeneratorOps.* import org.apache.pekko.http.scaladsl.model.Uri -import com.advancedtelematic.director.data.AdminDataType.{RegisterEcu, TargetUpdate, TargetUpdateRequest, TargetUpdateSpec} -import com.advancedtelematic.director.data.DeviceRequest.{DeviceManifest, EcuManifest, InstallationItem, InstallationReport, MissingInstallationReport} +import com.advancedtelematic.director.data.AdminDataType.{ + RegisterEcu, + TargetUpdate, + TargetUpdateRequest, + TargetUpdateSpec +} +import com.advancedtelematic.director.data.DeviceRequest.{ + DeviceManifest, + EcuManifest, + InstallationItem, + InstallationReport, + MissingInstallationReport +} import com.advancedtelematic.director.data.UptaneDataType.* -import com.advancedtelematic.libats.data.DataType.{Checksum, CorrelationId, HashMethod, MultiTargetUpdateCorrelationId, OfflineUpdateId, ResultCode, ResultDescription, ValidChecksum, ValidLockboxHash} -import com.advancedtelematic.libats.messaging_datatype.DataType.{EcuIdentifier, InstallationResult, ValidEcuIdentifier} -import com.advancedtelematic.libtuf.data.TufDataType.{Ed25519KeyType, HardwareIdentifier, KeyType, RsaKeyType, SignedPayload, TargetFilename, TufKey, TufKeyPair, ValidTargetFilename} +import com.advancedtelematic.libats.data.DataType.{ + Checksum, + CorrelationId, + HashMethod, + MultiTargetUpdateCorrelationId, + OfflineUpdateId, + ResultCode, + ResultDescription, + ValidChecksum, + ValidLockboxHash +} +import com.advancedtelematic.libats.messaging_datatype.DataType.{ + EcuIdentifier, + InstallationResult, + ValidEcuIdentifier +} +import com.advancedtelematic.libtuf.data.TufDataType.{ + Ed25519KeyType, + HardwareIdentifier, + KeyType, + RsaKeyType, + SignedPayload, + TargetFilename, + TufKey, + TufKeyPair, + ValidTargetFilename +} import eu.timepit.refined.api.{RefType, Refined} import io.circe.Json import Codecs.* diff --git a/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventIndexSpec.scala b/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventIndexSpec.scala index 104627e6..b964fddc 100644 --- a/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventIndexSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventIndexSpec.scala @@ -38,15 +38,7 @@ class EventIndexSpec extends DirectorSpec { eventType = EventType("", 0) ecu <- Gen.option(GenEcuIdentifier) json = Json.obj() - } yield Event( - device, - eventId, - eventType, - Instant.now, - Instant.now, - ecu, - json - ) + } yield Event(device, eventId, eventType, Instant.now, Instant.now, ecu, json) val downloadCompleteEventGen: Gen[Event] = eventGen.map(_.copy(eventType = EventType("DownloadComplete", 0))) diff --git a/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventJournalSpec.scala b/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventJournalSpec.scala index 008405fc..dac25794 100644 --- a/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventJournalSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/db/deviceregistry/EventJournalSpec.scala @@ -14,8 +14,16 @@ import java.util.UUID import org.apache.pekko.http.scaladsl.model.StatusCodes import cats.syntax.option.* import com.advancedtelematic.libats.codecs.CirceCodecs.* -import com.advancedtelematic.libats.data.DataType.{CorrelationId, MultiTargetUpdateCorrelationId, TargetSpecCorrelationId} -import com.advancedtelematic.libats.messaging_datatype.DataType.{Event, EventType, ValidEcuIdentifier} +import com.advancedtelematic.libats.data.DataType.{ + CorrelationId, + MultiTargetUpdateCorrelationId, + TargetSpecCorrelationId +} +import com.advancedtelematic.libats.messaging_datatype.DataType.{ + Event, + EventType, + ValidEcuIdentifier +} import com.advancedtelematic.libats.messaging_datatype.MessageCodecs.* import com.advancedtelematic.libats.messaging_datatype.Messages.DeviceEventMessage import EventJournalSpec.EventPayload @@ -83,7 +91,9 @@ class EventJournalSpec } yield EventType(id, ver) val genCorrelationId: Gen[CorrelationId] = - Gen.uuid.flatMap(uuid => Gen.oneOf(TargetSpecCorrelationId(uuid), MultiTargetUpdateCorrelationId(uuid))) + Gen.uuid.flatMap(uuid => + Gen.oneOf(TargetSpecCorrelationId(uuid), MultiTargetUpdateCorrelationId(uuid)) + ) implicit val EventGen: org.scalacheck.Gen[EventJournalSpec.EventPayload] = for { id <- Gen.uuid @@ -117,7 +127,15 @@ class EventJournalSpec events .map(ep => - Event(deviceUuid, ep.id.toString, ep.eventType, ep.deviceTime, Instant.now, refineMV[ValidEcuIdentifier]("ecuId").some, ep.event) + Event( + deviceUuid, + ep.id.toString, + ep.eventType, + ep.deviceTime, + Instant.now, + refineMV[ValidEcuIdentifier]("ecuId").some, + ep.event + ) ) .map(DeviceEventMessage(defaultNs, _)) .map(listener.apply) @@ -141,7 +159,15 @@ class EventJournalSpec List(event0, event1) .map(ep => - Event(deviceUuid, ep.id.toString, ep.eventType, ep.deviceTime, Instant.now, refineMV[ValidEcuIdentifier]("ecuId").some, ep.event) + Event( + deviceUuid, + ep.id.toString, + ep.eventType, + ep.deviceTime, + Instant.now, + refineMV[ValidEcuIdentifier]("ecuId").some, + ep.event + ) ) .map(DeviceEventMessage(defaultNs, _)) .map(listener.apply) @@ -165,7 +191,15 @@ class EventJournalSpec List(event0, event1) .map(ep => - Event(deviceUuid, ep.id.toString, ep.eventType, ep.deviceTime, Instant.now, refineMV[ValidEcuIdentifier]("ecuId").some, ep.event) + Event( + deviceUuid, + ep.id.toString, + ep.eventType, + ep.deviceTime, + Instant.now, + refineMV[ValidEcuIdentifier]("ecuId").some, + ep.event + ) ) .map(DeviceEventMessage(defaultNs, _)) .map(listener.apply) @@ -182,7 +216,15 @@ class EventJournalSpec test("DELETE device archives its indexed events") { val uuid = createDeviceOk(genDeviceT.generate) val (e, _) = installCompleteEventGen.generate - val event = Event(uuid, e.id.toString, e.eventType, e.deviceTime, Instant.now, refineMV[ValidEcuIdentifier]("ecuId").some, e.event) + val event = Event( + uuid, + e.id.toString, + e.eventType, + e.deviceTime, + Instant.now, + refineMV[ValidEcuIdentifier]("ecuId").some, + e.event + ) val deviceEventMessage = DeviceEventMessage(defaultNs, event) val journal = new EventJournal() diff --git a/src/test/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceInstallationReportListenerSpec.scala b/src/test/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceInstallationReportListenerSpec.scala index f74ed5f9..f09779a7 100644 --- a/src/test/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceInstallationReportListenerSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/deviceregistry/daemon/DeviceInstallationReportListenerSpec.scala @@ -50,7 +50,10 @@ class DeviceInstallationReportListenerSpec ) ) val deviceReports = - db.run(InstallationReportRepository.fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId)) + db.run( + InstallationReportRepository + .fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId) + ) deviceReports.futureValue shouldBe expectedDeviceReports val expectedEcuReports = message.ecuReports.map { case (ecuId, ecuReport) => @@ -71,7 +74,10 @@ class DeviceInstallationReportListenerSpec listener.apply(message).futureValue shouldBe (()) val deviceReportsAgain = - db.run(InstallationReportRepository.fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId)) + db.run( + InstallationReportRepository + .fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId) + ) deviceReportsAgain.futureValue shouldBe expectedDeviceReports val ecuReportsAgain = db.run(InstallationReportRepository.fetchEcuInstallationReport(deviceUuid, correlationId)) @@ -113,13 +119,19 @@ class DeviceInstallationReportListenerSpec ) val deviceReports = - db.run(InstallationReportRepository.fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId)) + db.run( + InstallationReportRepository + .fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId) + ) deviceReports.futureValue shouldBe expectedDeviceReportsFailed listener.apply(messageSuccess).futureValue shouldBe (()) val deviceReportsAgain = - db.run(InstallationReportRepository.fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId)) + db.run( + InstallationReportRepository + .fetchDeviceInstallationResultByCorrelationId(deviceUuid, correlationId) + ) deviceReportsAgain.futureValue shouldBe expectedDeviceReportsSuccess } diff --git a/src/test/scala/com/advancedtelematic/director/deviceregistry/data/InstallationReportGenerators.scala b/src/test/scala/com/advancedtelematic/director/deviceregistry/data/InstallationReportGenerators.scala index ce9df9a9..caa0954a 100644 --- a/src/test/scala/com/advancedtelematic/director/deviceregistry/data/InstallationReportGenerators.scala +++ b/src/test/scala/com/advancedtelematic/director/deviceregistry/data/InstallationReportGenerators.scala @@ -1,10 +1,29 @@ package com.advancedtelematic.director.deviceregistry.data import java.time.Instant -import com.advancedtelematic.libats.data.DataType.{CorrelationId, MultiTargetUpdateCorrelationId, Namespace, ResultCode, ResultDescription, TargetSpecCorrelationId} +import com.advancedtelematic.libats.data.DataType.{ + CorrelationId, + MultiTargetUpdateCorrelationId, + Namespace, + ResultCode, + ResultDescription, + TargetSpecCorrelationId +} import com.advancedtelematic.libats.data.RefinedUtils.RefineTry -import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, EcuIdentifier, EcuInstallationReport, InstallationResult, ValidEcuIdentifier} -import com.advancedtelematic.libats.messaging_datatype.Messages.{DeviceUpdateCompleted, EcuAndHardwareId, EcuReplaced, EcuReplacement, EcuReplacementFailed} +import com.advancedtelematic.libats.messaging_datatype.DataType.{ + DeviceId, + EcuIdentifier, + EcuInstallationReport, + InstallationResult, + ValidEcuIdentifier +} +import com.advancedtelematic.libats.messaging_datatype.Messages.{ + DeviceUpdateCompleted, + EcuAndHardwareId, + EcuReplaced, + EcuReplacement, + EcuReplacementFailed +} import org.scalacheck.Gen import scala.util.{Success, Try} @@ -13,7 +32,9 @@ object InstallationReportGenerators { import DeviceGenerators.* val genCorrelationId: Gen[CorrelationId] = - Gen.uuid.flatMap(uuid => Gen.oneOf(TargetSpecCorrelationId(uuid), MultiTargetUpdateCorrelationId(uuid))) + Gen.uuid.flatMap(uuid => + Gen.oneOf(TargetSpecCorrelationId(uuid), MultiTargetUpdateCorrelationId(uuid)) + ) val genEcuIdentifier: Gen[EcuIdentifier] = Gen diff --git a/src/test/scala/com/advancedtelematic/director/http/AdminResourceSpec.scala b/src/test/scala/com/advancedtelematic/director/http/AdminResourceSpec.scala index 6705ba2f..bc5e0ce8 100644 --- a/src/test/scala/com/advancedtelematic/director/http/AdminResourceSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/AdminResourceSpec.scala @@ -7,13 +7,21 @@ import org.apache.pekko.http.scaladsl.model.StatusCodes import cats.syntax.option.* import cats.syntax.show.* import com.advancedtelematic.director.data.ClientDataType -import com.advancedtelematic.director.data.AdminDataType.{EcuInfoResponse, FindImageCount, RegisterDevice, TargetUpdateSpec} +import com.advancedtelematic.director.data.AdminDataType.{ + EcuInfoResponse, + FindImageCount, + RegisterDevice, + TargetUpdateSpec +} import com.advancedtelematic.director.data.Codecs.* import com.advancedtelematic.director.data.DataType.TargetSpecId import com.advancedtelematic.director.data.DbDataType.Ecu import com.advancedtelematic.director.data.GeneratorOps.* import com.advancedtelematic.director.data.Generators.* -import com.advancedtelematic.director.db.{DbDeviceRoleRepositorySupport, RepoNamespaceRepositorySupport} +import com.advancedtelematic.director.db.{ + DbDeviceRoleRepositorySupport, + RepoNamespaceRepositorySupport +} import com.advancedtelematic.director.http.AdminResources.RegisterDeviceResult import com.advancedtelematic.director.util.* import com.advancedtelematic.libats.codecs.CirceCodecs.* @@ -23,7 +31,13 @@ import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, EcuId import com.advancedtelematic.libtuf.data.ClientCodecs.* import com.advancedtelematic.libtuf.data.ClientDataType.{RootRole, TargetsRole} import com.advancedtelematic.libtuf.data.TufCodecs.* -import com.advancedtelematic.libtuf.data.TufDataType.{HardwareIdentifier, SignedPayload, TargetFilename, TufKey, TufKeyPair} +import com.advancedtelematic.libtuf.data.TufDataType.{ + HardwareIdentifier, + SignedPayload, + TargetFilename, + TufKey, + TufKeyPair +} import com.github.pjfanning.pekkohttpcirce.FailFastCirceSupport.* import org.scalactic.source.Position import org.scalatest.Assertion diff --git a/src/test/scala/com/advancedtelematic/director/http/AssignmentsResourceSpec.scala b/src/test/scala/com/advancedtelematic/director/http/AssignmentsResourceSpec.scala index 6fd23d72..195abd85 100644 --- a/src/test/scala/com/advancedtelematic/director/http/AssignmentsResourceSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/AssignmentsResourceSpec.scala @@ -11,10 +11,18 @@ import com.advancedtelematic.director.data.Codecs.* import com.advancedtelematic.director.data.DataType.{TargetItemCustom, TargetSpecId} import com.advancedtelematic.director.data.GeneratorOps.* import com.advancedtelematic.director.data.Generators.* -import com.advancedtelematic.director.db.{DbDeviceRoleRepositorySupport, RepoNamespaceRepositorySupport, UpdatesDBIO} +import com.advancedtelematic.director.db.{ + DbDeviceRoleRepositorySupport, + RepoNamespaceRepositorySupport, + UpdatesDBIO +} import com.advancedtelematic.director.http.DeviceAssignments.AssignmentCreateResult import com.advancedtelematic.director.util.* -import com.advancedtelematic.libats.data.DataType.{CorrelationId, MultiTargetUpdateCorrelationId, Namespace} +import com.advancedtelematic.libats.data.DataType.{ + CorrelationId, + MultiTargetUpdateCorrelationId, + Namespace +} import com.advancedtelematic.libats.data.ErrorRepresentation import com.advancedtelematic.libats.messaging.test.MockMessageBus import com.advancedtelematic.libats.messaging_datatype.DataType.DeviceId @@ -578,40 +586,40 @@ class AssignmentsResourceSpec } } + testWithRepo("PATCH assignments cannot cancel an assignment that belongs to an update") { + implicit ns => + val regDev = registerAdminDeviceOk() + val hardwareId = regDev.primary.hardwareId + val targetUpdate = GenTargetUpdateRequest.generate + val createRequest = CreateUpdateRequest( + targets = Map(hardwareId -> targetUpdate), + devices = Seq(regDev.deviceId) + ) - testWithRepo("PATCH assignments cannot cancel an assignment that belongs to an update") { implicit ns => - val regDev = registerAdminDeviceOk() - val hardwareId = regDev.primary.hardwareId - val targetUpdate = GenTargetUpdateRequest.generate - val createRequest = CreateUpdateRequest( - targets = Map(hardwareId -> targetUpdate), - devices = Seq(regDev.deviceId) - ) - - createManyUpdates(createRequest) { - status shouldBe StatusCodes.OK - val result = responseAs[CreateUpdateResult] - result.affected should contain(regDev.deviceId) - } + createManyUpdates(createRequest) { + status shouldBe StatusCodes.OK + val result = responseAs[CreateUpdateResult] + result.affected should contain(regDev.deviceId) + } - val queue = getDeviceAssignmentOk(regDev.deviceId) - queue shouldNot be(empty) + val queue = getDeviceAssignmentOk(regDev.deviceId) + queue shouldNot be(empty) - Patch(apiUri(s"assignments"), Seq(regDev.deviceId)).namespaced ~> routes ~> check { - status shouldBe StatusCodes.Conflict - val error = responseAs[ErrorRepresentation] - error.code shouldBe ErrorCodes.AssignmentBelongsToUpdate - } + Patch(apiUri(s"assignments"), Seq(regDev.deviceId)).namespaced ~> routes ~> check { + status shouldBe StatusCodes.Conflict + val error = responseAs[ErrorRepresentation] + error.code shouldBe ErrorCodes.AssignmentBelongsToUpdate + } } - testWithRepo("PATCH on assignments/device-id cannot cancel an assignment that belongs to an update") { implicit ns => + testWithRepo( + "PATCH on assignments/device-id cannot cancel an assignment that belongs to an update" + ) { implicit ns => val regDev = registerAdminDeviceOk() val hardwareId = regDev.primary.hardwareId val targetUpdate = GenTargetUpdateRequest.generate - val createRequest = CreateUpdateRequest( - targets = Map(hardwareId -> targetUpdate), - devices = Seq(regDev.deviceId) - ) + val createRequest = + CreateUpdateRequest(targets = Map(hardwareId -> targetUpdate), devices = Seq(regDev.deviceId)) createManyUpdates(createRequest) { status shouldBe StatusCodes.OK diff --git a/src/test/scala/com/advancedtelematic/director/http/DeviceResourceSpec.scala b/src/test/scala/com/advancedtelematic/director/http/DeviceResourceSpec.scala index 1f4d9f14..5cb41fed 100644 --- a/src/test/scala/com/advancedtelematic/director/http/DeviceResourceSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/DeviceResourceSpec.scala @@ -6,10 +6,24 @@ import cats.syntax.option.* import cats.syntax.show.* import com.advancedtelematic.director.daemon.UpdateSchedulerDaemon import com.advancedtelematic.director.data.AdminDataType -import com.advancedtelematic.director.data.AdminDataType.{EcuInfoResponse, QueueResponse, RegisterDevice, TargetUpdate, TargetUpdateSpec} +import com.advancedtelematic.director.data.AdminDataType.{ + EcuInfoResponse, + QueueResponse, + RegisterDevice, + TargetUpdate, + TargetUpdateSpec +} import com.advancedtelematic.director.data.Codecs.* import com.advancedtelematic.director.data.DataType.* -import com.advancedtelematic.director.data.DeviceRequest.{DeviceManifest, EcuManifest, EcuManifestCustom, InstallationReport, InstallationReportEntity, MissingInstallationReport, OperationResult} +import com.advancedtelematic.director.data.DeviceRequest.{ + DeviceManifest, + EcuManifest, + EcuManifestCustom, + InstallationReport, + InstallationReportEntity, + MissingInstallationReport, + OperationResult +} import com.advancedtelematic.director.data.GeneratorOps.* import com.advancedtelematic.director.data.Generators.* import com.advancedtelematic.director.data.Messages.DeviceManifestReported @@ -25,14 +39,30 @@ import com.advancedtelematic.director.deviceregistry.data.DeviceGenerators.genDe import com.advancedtelematic.director.http.deviceregistry.RegistryDeviceRequests import com.advancedtelematic.director.manifest.ResultCodes import com.advancedtelematic.director.util.* -import com.advancedtelematic.libats.data.DataType.{CorrelationId, HashMethod, MultiTargetUpdateCorrelationId, Namespace, ResultCode, ResultDescription, UpdateCorrelationId} +import com.advancedtelematic.libats.data.DataType.{ + CorrelationId, + HashMethod, + MultiTargetUpdateCorrelationId, + Namespace, + ResultCode, + ResultDescription, + UpdateCorrelationId +} import com.advancedtelematic.libats.data.ErrorRepresentation import com.advancedtelematic.libats.messaging.test.MockMessageBus import com.advancedtelematic.libats.messaging_datatype.DataType.{DeviceId, InstallationResult} import com.advancedtelematic.libats.messaging_datatype.DataType.DeviceId.* import com.advancedtelematic.libats.messaging_datatype.Messages.* import com.advancedtelematic.libtuf.data.ClientCodecs.* -import com.advancedtelematic.libtuf.data.ClientDataType.{RemoteSessionsPayload, RootRole, SnapshotRole, SshSessionProperties, TargetsRole, TimestampRole, TufRole} +import com.advancedtelematic.libtuf.data.ClientDataType.{ + RemoteSessionsPayload, + RootRole, + SnapshotRole, + SshSessionProperties, + TargetsRole, + TimestampRole, + TufRole +} import com.advancedtelematic.director.http.RemoteSessionRequest import com.advancedtelematic.libtuf.data.TufCodecs.* import com.advancedtelematic.libtuf.data.TufDataType.SignedPayload @@ -1674,44 +1704,46 @@ class DeviceResourceSpec } } - testWithRepo( - "installing assignments created via a scheduled update updates update status" - ) { implicit ns => - val dev = registerAdminDeviceWithSecondariesOk() - val currentUpdate = GenTargetUpdateRequest.generate - val newUpdate = GenTargetUpdateRequest.generate - val secondarySerial = dev.secondaries.keys.head - val secondaryKey = dev.secondaryKeys(secondarySerial) + testWithRepo("installing assignments created via a scheduled update updates update status") { + implicit ns => + val dev = registerAdminDeviceWithSecondariesOk() + val currentUpdate = GenTargetUpdateRequest.generate + val newUpdate = GenTargetUpdateRequest.generate + val secondarySerial = dev.secondaries.keys.head + val secondaryKey = dev.secondaryKeys(secondarySerial) - val deviceManifest = buildSecondaryManifest( - dev.primary.ecuSerial, - dev.primaryKey, - secondarySerial, - secondaryKey, - Map(dev.primary.ecuSerial -> currentUpdate.to, secondarySerial -> currentUpdate.to) - ) - putManifestOk(dev.deviceId, deviceManifest) + val deviceManifest = buildSecondaryManifest( + dev.primary.ecuSerial, + dev.primaryKey, + secondarySerial, + secondaryKey, + Map(dev.primary.ecuSerial -> currentUpdate.to, secondarySerial -> currentUpdate.to) + ) + putManifestOk(dev.deviceId, deviceManifest) - val mtu = TargetUpdateSpec( - Map(dev.secondaries.values.head.hardwareId -> newUpdate, dev.primary.hardwareId -> newUpdate) - ) + val mtu = TargetUpdateSpec( + Map( + dev.secondaries.values.head.hardwareId -> newUpdate, + dev.primary.hardwareId -> newUpdate + ) + ) - createUpdateOk(dev.deviceId, mtu) + createUpdateOk(dev.deviceId, mtu) - updateSchedulerIO.run().futureValue + updateSchedulerIO.run().futureValue - val newManifest = buildSecondaryManifest( - dev.primary.ecuSerial, - dev.primaryKey, - secondarySerial, - secondaryKey, - Map(dev.primary.ecuSerial -> newUpdate.to, secondarySerial -> newUpdate.to) - ) + val newManifest = buildSecondaryManifest( + dev.primary.ecuSerial, + dev.primaryKey, + secondarySerial, + secondaryKey, + Map(dev.primary.ecuSerial -> newUpdate.to, secondarySerial -> newUpdate.to) + ) - putManifestOk(dev.deviceId, newManifest) + putManifestOk(dev.deviceId, newManifest) - val scheduledUpdate = listUpdatesOK(dev.deviceId).values.loneElement - scheduledUpdate.status shouldBe Update.Status.Completed + val scheduledUpdate = listUpdatesOK(dev.deviceId).values.loneElement + scheduledUpdate.status shouldBe Update.Status.Completed } testWithRepo( diff --git a/src/test/scala/com/advancedtelematic/director/http/LegacyApiResourceSpec.scala b/src/test/scala/com/advancedtelematic/director/http/LegacyApiResourceSpec.scala index 783fb41c..c38df120 100644 --- a/src/test/scala/com/advancedtelematic/director/http/LegacyApiResourceSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/LegacyApiResourceSpec.scala @@ -1,7 +1,7 @@ package com.advancedtelematic.director.http import org.apache.pekko.http.scaladsl.model.StatusCodes -import com.advancedtelematic.director.data.AdminDataType.{TargetUpdateSpec, QueueResponse} +import com.advancedtelematic.director.data.AdminDataType.{QueueResponse, TargetUpdateSpec} import com.advancedtelematic.director.util.{DirectorSpec, RepositorySpec, ResourceSpec} import com.advancedtelematic.libats.messaging_datatype.DataType.DeviceId import com.advancedtelematic.director.data.Generators.* diff --git a/src/test/scala/com/advancedtelematic/director/http/RemoteSessionsRoutesSpec.scala b/src/test/scala/com/advancedtelematic/director/http/RemoteSessionsRoutesSpec.scala index d1cc1b3c..d7e20404 100644 --- a/src/test/scala/com/advancedtelematic/director/http/RemoteSessionsRoutesSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/RemoteSessionsRoutesSpec.scala @@ -185,10 +185,7 @@ class RemoteSessionsRoutesSpec responseAs[SignedPayload[RemoteSessionsRole]].signed } - val payload02 = RemoteCommandsPayload( - Map(Reboot -> CommandParameters(List.empty)), - "v1alpha" - ) + val payload02 = RemoteCommandsPayload(Map(Reboot -> CommandParameters(List.empty)), "v1alpha") val remoteSessionsRole = RemoteSessionsRole( currentRole.remote_sessions, diff --git a/src/test/scala/com/advancedtelematic/director/http/TargetUpdateSpecsResourceSpec.scala b/src/test/scala/com/advancedtelematic/director/http/TargetUpdateSpecsResourceSpec.scala index a5d2bce8..0e579122 100644 --- a/src/test/scala/com/advancedtelematic/director/http/TargetUpdateSpecsResourceSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/TargetUpdateSpecsResourceSpec.scala @@ -2,7 +2,7 @@ package com.advancedtelematic.director.http import org.apache.pekko.http.scaladsl.model.StatusCodes import cats.syntax.show.* -import com.advancedtelematic.director.data.AdminDataType.{TargetUpdateSpec, TargetUpdateRequest} +import com.advancedtelematic.director.data.AdminDataType.{TargetUpdateRequest, TargetUpdateSpec} import com.advancedtelematic.director.data.Codecs.* import com.advancedtelematic.director.data.DataType.TargetSpecId import com.advancedtelematic.director.data.GeneratorOps.GenSample diff --git a/src/test/scala/com/advancedtelematic/director/http/UpdateResourceSpec.scala b/src/test/scala/com/advancedtelematic/director/http/UpdateResourceSpec.scala index 6b656d88..80235736 100644 --- a/src/test/scala/com/advancedtelematic/director/http/UpdateResourceSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/UpdateResourceSpec.scala @@ -138,7 +138,6 @@ class UpdateResourceSpec update.status shouldBe Update.Status.Seen } - testWithRepo("update is marked as completed when device reports successful installation") { implicit ns => val device = registerAdminDeviceOk() @@ -751,7 +750,6 @@ class UpdateResourceSpec } } - testWithRepo("can cancel all updates and assignments for all devices with a given update") { implicit ns => val device1 = registerAdminDeviceOk() @@ -787,36 +785,37 @@ class UpdateResourceSpec cancelledUpdates2.values.loneElement.status shouldBe Update.Status.Cancelled } - testWithRepo("cancelling scheduled updates sends messages when the update is not yet assigned") { implicit ns => - val device = registerAdminDeviceOk() - val hardwareId = device.primary.hardwareId - val targetUpdate = GenTargetUpdate.generate - val targetRequest = TargetUpdateRequest(None, targetUpdate) + testWithRepo("cancelling scheduled updates sends messages when the update is not yet assigned") { + implicit ns => + val device = registerAdminDeviceOk() + val hardwareId = device.primary.hardwareId + val targetUpdate = GenTargetUpdate.generate + val targetRequest = TargetUpdateRequest(None, targetUpdate) - createUpdateOk( - device.deviceId, - TargetUpdateSpec(Map(hardwareId -> targetRequest)), - Instant.now.minusSeconds(60).some - ) + createUpdateOk( + device.deviceId, + TargetUpdateSpec(Map(hardwareId -> targetRequest)), + Instant.now.minusSeconds(60).some + ) - val updates = listUpdatesOK(device.deviceId) - val update = updates.values.loneElement - update.status shouldBe Update.Status.Scheduled - val updateId = update.updateId + val updates = listUpdatesOK(device.deviceId) + val update = updates.values.loneElement + update.status shouldBe Update.Status.Scheduled + val updateId = update.updateId - cancelAllUpdatesOK(updateId) + cancelAllUpdatesOK(updateId) - val cancelledUpdates = listUpdatesOK(device.deviceId) - cancelledUpdates.values should have size 1 - cancelledUpdates.values.head.status shouldBe Update.Status.Cancelled + val cancelledUpdates = listUpdatesOK(device.deviceId) + cancelledUpdates.values should have size 1 + cancelledUpdates.values.head.status shouldBe Update.Status.Cancelled - val msg = msgPub - .findReceived[DeviceUpdateEvent] { (msg: DeviceUpdateEvent) => - msg.deviceUuid == device.deviceId && msg.correlationId == updateId.toCorrelationId && + val msg = msgPub + .findReceived[DeviceUpdateEvent] { (msg: DeviceUpdateEvent) => + msg.deviceUuid == device.deviceId && msg.correlationId == updateId.toCorrelationId && msg.isInstanceOf[DeviceUpdateCanceled] - } + } - msg shouldNot be(empty) + msg shouldNot be(empty) } } diff --git a/src/test/scala/com/advancedtelematic/director/http/UpdatesResources.scala b/src/test/scala/com/advancedtelematic/director/http/UpdatesResources.scala index fe3f57fb..e6ff5762 100644 --- a/src/test/scala/com/advancedtelematic/director/http/UpdatesResources.scala +++ b/src/test/scala/com/advancedtelematic/director/http/UpdatesResources.scala @@ -57,26 +57,27 @@ trait UpdatesResources { status shouldBe StatusCodes.NoContent } - def getUpdateDetailOK( - deviceId: DeviceId, - updateId: UpdateId)(implicit ns: Namespace, pos: Position): UpdateDetailResponse = - Get(apiUri(s"updates/devices/${deviceId.show}/${updateId.show}")).namespaced ~> routes ~> check { + def getUpdateDetailOK(deviceId: DeviceId, updateId: UpdateId)( + implicit ns: Namespace, + pos: Position): UpdateDetailResponse = + Get( + apiUri(s"updates/devices/${deviceId.show}/${updateId.show}") + ).namespaced ~> routes ~> check { status shouldBe StatusCodes.OK responseAs[UpdateDetailResponse] } - def cancelAllUpdatesOK(updateId: UpdateId)(implicit ns: Namespace, pos: Position): Unit = { + def cancelAllUpdatesOK(updateId: UpdateId)(implicit ns: Namespace, pos: Position): Unit = Patch(apiUri(s"updates/${updateId.show}")).namespaced ~> routes ~> check { status shouldBe StatusCodes.NoContent } - } - def listAllUpdatesOK(limit: Long = 100, offset: Long = 0) - (implicit ns: Namespace, pos: Position): PaginationResult[UpdateResponse] = - Get(apiUri(s"updates?limit=${limit}&offset=${offset}")) - .namespaced ~> routes ~> check { - status shouldBe StatusCodes.OK - responseAs[PaginationResult[UpdateResponse]] - } + def listAllUpdatesOK(limit: Long = 100, offset: Long = 0)( + implicit ns: Namespace, + pos: Position): PaginationResult[UpdateResponse] = + Get(apiUri(s"updates?limit=${limit}&offset=${offset}")).namespaced ~> routes ~> check { + status shouldBe StatusCodes.OK + responseAs[PaginationResult[UpdateResponse]] + } } diff --git a/src/test/scala/com/advancedtelematic/director/http/deviceregistry/InstallationReportSpec.scala b/src/test/scala/com/advancedtelematic/director/http/deviceregistry/InstallationReportSpec.scala index 36641bfa..dd514272 100644 --- a/src/test/scala/com/advancedtelematic/director/http/deviceregistry/InstallationReportSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/http/deviceregistry/InstallationReportSpec.scala @@ -19,10 +19,7 @@ import com.advancedtelematic.libats.messaging_datatype.MessageCodecs.{ deviceUpdateCompletedCodec, ecuReplacementCodec } -import com.advancedtelematic.libats.messaging_datatype.Messages.{ - DeviceUpdateCompleted, - EcuReplaced -} +import com.advancedtelematic.libats.messaging_datatype.Messages.{DeviceUpdateCompleted, EcuReplaced} import com.github.pjfanning.pekkohttpcirce.FailFastCirceSupport.* import io.circe.Json import org.scalacheck.Gen diff --git a/src/test/scala/com/advancedtelematic/director/http/deviceregistry/RegistryDeviceRequests.scala b/src/test/scala/com/advancedtelematic/director/http/deviceregistry/RegistryDeviceRequests.scala index 8d62e91f..afc26e9e 100644 --- a/src/test/scala/com/advancedtelematic/director/http/deviceregistry/RegistryDeviceRequests.scala +++ b/src/test/scala/com/advancedtelematic/director/http/deviceregistry/RegistryDeviceRequests.scala @@ -287,7 +287,6 @@ trait RegistryDeviceRequests { self: DefaultPatience & ResourceSpec & Matchers = println(csv) - val multipartForm = Multipart.FormData( Multipart.FormData.BodyPart.Strict( "custom-device-fields", diff --git a/src/test/scala/com/advancedtelematic/director/manifest/ManifestCompilerSpec.scala b/src/test/scala/com/advancedtelematic/director/manifest/ManifestCompilerSpec.scala index dbec7870..959e650e 100644 --- a/src/test/scala/com/advancedtelematic/director/manifest/ManifestCompilerSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/manifest/ManifestCompilerSpec.scala @@ -4,8 +4,17 @@ import cats.implicits.catsSyntaxOptionId import com.advancedtelematic.director.data.AdminDataType.TargetUpdate import com.advancedtelematic.director.data.Codecs.* import com.advancedtelematic.director.data.DataType.{TargetSpecId, Update, UpdateId} -import com.advancedtelematic.director.data.DbDataType.{Assignment, DeviceKnownState, EcuTarget, EcuTargetId} -import com.advancedtelematic.director.data.DeviceRequest.{DeviceManifest, EcuManifest, MissingInstallationReport} +import com.advancedtelematic.director.data.DbDataType.{ + Assignment, + DeviceKnownState, + EcuTarget, + EcuTargetId +} +import com.advancedtelematic.director.data.DeviceRequest.{ + DeviceManifest, + EcuManifest, + MissingInstallationReport +} import com.advancedtelematic.director.data.GeneratorOps.* import com.advancedtelematic.director.data.Generators.* import com.advancedtelematic.director.data.UptaneDataType.* diff --git a/src/test/scala/com/advancedtelematic/director/util/ResourceSpec.scala b/src/test/scala/com/advancedtelematic/director/util/ResourceSpec.scala index 54b38ae8..a151efe2 100644 --- a/src/test/scala/com/advancedtelematic/director/util/ResourceSpec.scala +++ b/src/test/scala/com/advancedtelematic/director/util/ResourceSpec.scala @@ -14,7 +14,13 @@ import com.advancedtelematic.director.data.AdminDataType.TargetUpdate import com.advancedtelematic.director.data.UptaneDataType.* import com.advancedtelematic.director.data.DbDataType.Ecu import com.advancedtelematic.director.data.DeviceRequest -import com.advancedtelematic.director.data.DeviceRequest.{DeviceManifest, EcuManifest, InstallationReport, InstallationReportEntity, MissingInstallationReport} +import com.advancedtelematic.director.data.DeviceRequest.{ + DeviceManifest, + EcuManifest, + InstallationReport, + InstallationReportEntity, + MissingInstallationReport +} import com.advancedtelematic.director.data.Codecs.* import com.advancedtelematic.director.data.UptaneDataType.Image import com.advancedtelematic.director.db.deviceregistry.DeviceRepository