Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix [Mock] Update mock for creating a function from UI #335

Open
wants to merge 1 commit into
base: development
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 70 additions & 46 deletions tests/mockServer/mock.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@ const projectExistsConflict = {
detail: "MLRunConflictError('Conflict - Project already exists')"
}
const projectsLimitReachedConflict = {
detail: "MLRunHTTPError(\"Failed creating project in Iguazio: [{'status': 405, 'detail': 'Resource limit reached. Cannot create more records'}]\")"
detail:
"MLRunHTTPError(\"Failed creating project in Iguazio: [{'status': 405, 'detail': 'Resource limit reached. Cannot create more records'}]\")"
}
const secretKeyTemplate = {
provider: 'kubernetes',
Expand Down Expand Up @@ -308,7 +309,9 @@ function deleteProjectHandler(req, res, omitResponse) {

function filterByLabels(elementLabels, requestLabels) {
if (requestLabels?.length > 0 && !isEmpty(elementLabels)) {
const requestLabelsList = (isArray(requestLabels) ? requestLabels : [requestLabels]).map(label => label.split('='))
const requestLabelsList = (isArray(requestLabels) ? requestLabels : [requestLabels]).map(
label => label.split('=')
)

return requestLabelsList.every(([key = '', value = '']) => {
const trimmedKey = key.trim()
Expand All @@ -319,10 +322,15 @@ function filterByLabels(elementLabels, requestLabels) {
}

if (trimmedValue && trimmedValue.startsWith('~')) {
return elementLabels[trimmedKey] && elementLabels[trimmedKey].toLowerCase().includes(trimmedValue.substring(1).toLowerCase())
return (
elementLabels[trimmedKey] &&
elementLabels[trimmedKey].toLowerCase().includes(trimmedValue.substring(1).toLowerCase())
)
}

return elementLabels[trimmedKey] && (!trimmedValue || elementLabels[trimmedKey] === trimmedValue)
return (
elementLabels[trimmedKey] && (!trimmedValue || elementLabels[trimmedKey] === trimmedValue)
)
})
}

Expand Down Expand Up @@ -372,7 +380,9 @@ function getFeatureSet(req, res) {
}

if (req.query['label']) {
collectedFeatureSets = collectedFeatureSets.filter(featureSet => filterByLabels(featureSet.metadata.labels, req.query['label']))
collectedFeatureSets = collectedFeatureSets.filter(featureSet =>
filterByLabels(featureSet.metadata.labels, req.query['label'])
)
}

res.send({ feature_sets: collectedFeatureSets })
Expand Down Expand Up @@ -463,17 +473,20 @@ function deleteProjectV2(req, res) {

const handleDeletion = () => {
const taskFunc = () => {
return new Promise((resolve) => {
setTimeout(() => {
deleteProjectHandler(req, res, true)
resolve()
}, random(5000, 10000))
return new Promise(resolve => {
setTimeout(
() => {
deleteProjectHandler(req, res, true)
resolve()
},
random(5000, 10000)
)
})
}

const task = createTask(null, {
taskFunc,
kind: `project.deletion.wrapper.${req.params.project}`,
kind: `project.deletion.wrapper.${req.params.project}`
})

res.status = 202
Expand All @@ -484,11 +497,11 @@ function deleteProjectV2(req, res) {
handleDeletion()
} else {
const collectedProject = projects.projects.filter(
(project) => project.metadata.name === req.params['project']
project => project.metadata.name === req.params['project']
)

const isEmpty = collectedProject.every(
(project) =>
project =>
(project.spec.functions && project.spec.functions.length > 0) ||
(project.spec.workflows && project.spec.workflows.length > 0) ||
(project.spec.artifacts && project.spec.artifacts.length > 0)
Expand All @@ -498,12 +511,12 @@ function deleteProjectV2(req, res) {
handleDeletion()
} else {
res.status(412).send({
detail: `MLRunPreconditionFailedError('Project ${req.params.project} cannot be deleted since related resources found: artifacts')`,
detail: `MLRunPreconditionFailedError('Project ${req.params.project} cannot be deleted since related resources found: artifacts')`
})
}
}
}

function patchProject(req, res) {
const project = projects.projects.find(project => project.metadata.name === req.params['project'])

Expand Down Expand Up @@ -723,17 +736,17 @@ function getRuns(req, res) {
.filter(run => {
const runStartTime = new Date(run.status.start_time)

if (!start_time_from || runStartTime >= new Date(start_time_from)) {
if (state) {
if (isArray(state)) {
return state.includes(run.status.state)
if (!start_time_from || runStartTime >= new Date(start_time_from)) {
if (state) {
if (isArray(state)) {
return state.includes(run.status.state)
} else {
return run.status.state === state
}
} else {
return run.status.state === state
return true
}
} else {
return true
}
}

return false
})
Expand Down Expand Up @@ -761,7 +774,9 @@ function getRuns(req, res) {
}

if (req.query['label']) {
collectedRuns = collectedRuns.filter(run => filterByLabels(run.metadata.labels, req.query['label']))
collectedRuns = collectedRuns.filter(run =>
filterByLabels(run.metadata.labels, req.query['label'])
)
}

if (req.query['partition-by'] && req.query['partition-sort-by']) {
Expand Down Expand Up @@ -899,7 +914,9 @@ function getProjectsSchedules(req, res) {
}

if (req.query['label']) {
collectedSchedules = collectedSchedules.filter(schedule => filterByLabels(schedule.labels, req.query['label']))
collectedSchedules = collectedSchedules.filter(schedule =>
filterByLabels(schedule.labels, req.query['label'])
)
}

res.send({ schedules: collectedSchedules })
Expand Down Expand Up @@ -1176,7 +1193,9 @@ function getArtifacts(req, res) {
}

if (req.query['label']) {
collectedArtifacts = collectedArtifacts.filter(artifact => filterByLabels(artifact.metadata.labels, req.query['label']))
collectedArtifacts = collectedArtifacts.filter(artifact =>
filterByLabels(artifact.metadata.labels, req.query['label'])
)
}

if (req.query['name']) {
Expand Down Expand Up @@ -1215,17 +1234,17 @@ function getArtifacts(req, res) {

if (req.query['format'] === 'minimal') {
collectedArtifacts = collectedArtifacts.map(func => {
const fieldsToPick = [
'db_key',
'producer',
'size',
'target_path',
'framework',
'metrics'
]
const fieldsToPick = ['db_key', 'producer', 'size', 'target_path', 'framework', 'metrics']
const specFieldsToPick = fieldsToPick.map(fieldName => `spec.${fieldName}`)

return pick(func, ['kind', 'metadata', 'status', 'project', ...specFieldsToPick, ...fieldsToPick])
return pick(func, [
'kind',
'metadata',
'status',
'project',
...specFieldsToPick,
...fieldsToPick
])
})
}

Expand Down Expand Up @@ -1313,13 +1332,12 @@ function patchProjectsFeatureVectors(req, res) {
}

function getProjectsFeatureVector(req, res) {
const featureVector = featureVectors.feature_vectors
.find(
item =>
item.metadata.project === req.params.project &&
item.metadata.name === req.params.name &&
(item.metadata.uid === req.params.reference || item.metadata.tag === req.params.reference)
)
const featureVector = featureVectors.feature_vectors.find(
item =>
item.metadata.project === req.params.project &&
item.metadata.name === req.params.name &&
(item.metadata.uid === req.params.reference || item.metadata.tag === req.params.reference)
)

if (featureVector) {
res.send(featureVector)
Expand Down Expand Up @@ -1542,6 +1560,10 @@ function postFunc(req, res) {
baseFunc.metadata.hash = hashPwd
baseFunc.status = {}

if (!baseFunc.metadata.tag) {
baseFunc.metadata.tag = 'latest'
}

funcs.funcs.push(baseFunc)

res.send({ hash_key: hashPwd })
Expand Down Expand Up @@ -1706,7 +1728,7 @@ function getFileStats(req, res) {
const { size } = fs.statSync(filePath)
const mimeType = mime.lookup(filePath)

res.send({mimetype: mimeType, size, modified: Date.now()})
res.send({ mimetype: mimeType, size, modified: Date.now() })
}

function deleteSchedule(req, res) {
Expand Down Expand Up @@ -1886,7 +1908,8 @@ function putTags(req, res) {

return (
artifactMetaData?.project === req.params.project &&
(artifact.kind === req.body.identifiers[0].kind || (!artifact.kind && req.body.identifiers[0].kind === 'artifact')) &&
(artifact.kind === req.body.identifiers[0].kind ||
(!artifact.kind && req.body.identifiers[0].kind === 'artifact')) &&
(artifactMetaData?.uid === req.body.identifiers[0].uid ||
artifactMetaData?.tree === req.body.identifiers[0].uid) &&
artifactSpecData?.db_key === req.body.identifiers[0].key
Expand Down Expand Up @@ -2096,7 +2119,9 @@ function getModelEndpoints(req, res) {
}
}))
if (req.query['label']) {
collectedEndpoints = collectedEndpoints.filter(endpoint => filterByLabels(endpoint.metadata.labels, req.query['label']))
collectedEndpoints = collectedEndpoints.filter(endpoint =>
filterByLabels(endpoint.metadata.labels, req.query['label'])
)
}

res.send({ endpoints: collectedEndpoints })
Expand Down Expand Up @@ -2526,7 +2551,6 @@ app.post(`${mlrunAPIIngress}/build/function`, deployMLFunction)
app.get(`${mlrunAPIIngress}/projects/:project/files`, getFile)
app.get(`${mlrunAPIIngress}/projects/:project/filestat`, getFileStats)


app.get(`${mlrunAPIIngress}/log/:project/:uid`, getLog)

app.get(`${mlrunAPIIngress}/projects/:project/runtime-resources`, getRuntimeResources)
Expand Down
Loading