mirror of
				https://github.com/ClusterCockpit/cc-backend
				synced 2025-10-31 16:05:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			154 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (C) 2023 NHR@FAU, University Erlangen-Nuremberg.
 | |
| // All rights reserved.
 | |
| // Use of this source code is governed by a MIT-style
 | |
| // license that can be found in the LICENSE file.
 | |
| package archive
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/ClusterCockpit/cc-backend/pkg/schema"
 | |
| )
 | |
| 
 | |
| func TestS3Init(t *testing.T) {
 | |
| 	var s3a S3Archive
 | |
| 	version, err := s3a.Init(json.RawMessage("{\"endpoint\":\"192.168.1.10:9100\",\"accessKeyID\":\"uACSaCN2Chiotpnr4bBS\",\"secretAccessKey\":\"MkEbBsFvMii1K5GreUriTJZxH359B1n28Au9Kaml\",\"bucket\":\"cc-archive\",\"useSSL\":false}"))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if s3a.bucket != "cc-archive" {
 | |
| 		t.Errorf("S3 bucket \ngot: %s \nwant: cc-archive", s3a.bucket)
 | |
| 	}
 | |
| 	if version != 1 {
 | |
| 		t.Errorf("S3 archive version \ngot: %d \nwant: 1", version)
 | |
| 		t.Fail()
 | |
| 	}
 | |
| 	if len(s3a.clusters) != 2 || s3a.clusters[0] != "alex" {
 | |
| 		t.Fail()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestS3LoadJobMeta(t *testing.T) {
 | |
| 	var s3a S3Archive
 | |
| 	_, err := s3a.Init(json.RawMessage("{\"endpoint\":\"192.168.1.10:9100\",\"accessKeyID\":\"uACSaCN2Chiotpnr4bBS\",\"secretAccessKey\":\"MkEbBsFvMii1K5GreUriTJZxH359B1n28Au9Kaml\",\"bucket\":\"cc-archive\",\"useSSL\":false}"))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	jobIn := schema.Job{BaseJob: schema.JobDefaults}
 | |
| 	jobIn.StartTime = time.Unix(1675954353, 0)
 | |
| 	jobIn.JobID = 398764
 | |
| 	jobIn.Cluster = "fritz"
 | |
| 
 | |
| 	job, err := s3a.LoadJobMeta(&jobIn)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if job.JobID != 398764 {
 | |
| 		t.Fail()
 | |
| 	}
 | |
| 	if int(job.NumNodes) != len(job.Resources) {
 | |
| 		t.Fail()
 | |
| 	}
 | |
| 	if job.StartTime != 1675954353 {
 | |
| 		t.Fail()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestS3LoadJobData(t *testing.T) {
 | |
| 	var s3a S3Archive
 | |
| 	_, err := s3a.Init(json.RawMessage("{\"endpoint\":\"192.168.1.10:9100\",\"accessKeyID\":\"uACSaCN2Chiotpnr4bBS\",\"secretAccessKey\":\"MkEbBsFvMii1K5GreUriTJZxH359B1n28Au9Kaml\",\"bucket\":\"cc-archive\",\"useSSL\":false}"))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	jobIn := schema.Job{BaseJob: schema.JobDefaults}
 | |
| 	jobIn.StartTime = time.Unix(1675954353, 0)
 | |
| 	jobIn.JobID = 398764
 | |
| 	jobIn.Cluster = "fritz"
 | |
| 
 | |
| 	data, err := s3a.LoadJobData(&jobIn)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	for _, scopes := range data {
 | |
| 		// fmt.Printf("Metric name: %s\n", name)
 | |
| 
 | |
| 		if _, exists := scopes[schema.MetricScopeNode]; !exists {
 | |
| 			t.Fail()
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestS3LoadCluster(t *testing.T) {
 | |
| 	var s3a S3Archive
 | |
| 	_, err := s3a.Init(json.RawMessage("{\"endpoint\":\"192.168.1.10:9100\",\"accessKeyID\":\"uACSaCN2Chiotpnr4bBS\",\"secretAccessKey\":\"MkEbBsFvMii1K5GreUriTJZxH359B1n28Au9Kaml\",\"bucket\":\"cc-archive\",\"useSSL\":false}"))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	cfg, err := s3a.LoadClusterCfg("fritz")
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if cfg.SubClusters[0].CoresPerSocket != 36 {
 | |
| 		t.Fail()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestS3JobImport(t *testing.T) {
 | |
| 	var s3a S3Archive
 | |
| 	_, err := s3a.Init(json.RawMessage("{\"endpoint\":\"192.168.1.10:9100\",\"accessKeyID\":\"uACSaCN2Chiotpnr4bBS\",\"secretAccessKey\":\"MkEbBsFvMii1K5GreUriTJZxH359B1n28Au9Kaml\",\"bucket\":\"cc-archive\",\"useSSL\":false}"))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	raw, err := os.ReadFile("./testdata/archive/fritz/398/759/1675954289/meta.json")
 | |
| 	if err != nil {
 | |
| 		t.Fatal("Error while reading metadata file for import")
 | |
| 	}
 | |
| 
 | |
| 	dec := json.NewDecoder(bytes.NewReader(raw))
 | |
| 	dec.DisallowUnknownFields()
 | |
| 	jobMeta := schema.JobMeta{BaseJob: schema.JobDefaults}
 | |
| 	if err = dec.Decode(&jobMeta); err != nil {
 | |
| 		t.Fatal("Error while decoding raw json metadata for import")
 | |
| 	}
 | |
| 
 | |
| 	raw, err = os.ReadFile("./testdata/archive/fritz/398/759/1675954289/data.json")
 | |
| 	if err != nil {
 | |
| 		t.Fatal("Error while reading jobdata file for import")
 | |
| 	}
 | |
| 
 | |
| 	dec = json.NewDecoder(bytes.NewReader(raw))
 | |
| 	dec.DisallowUnknownFields()
 | |
| 	jobData := schema.JobData{}
 | |
| 	if err = dec.Decode(&jobData); err != nil {
 | |
| 		t.Fatal("Error while decoding raw json jobdata for import")
 | |
| 	}
 | |
| 
 | |
| 	s3a.ImportJob(&jobMeta, &jobData)
 | |
| }
 | |
| 
 | |
| func TestS3Iter(t *testing.T) {
 | |
| 	var s3a S3Archive
 | |
| 	_, err := s3a.Init(json.RawMessage("{\"endpoint\":\"192.168.1.10:9100\",\"accessKeyID\":\"uACSaCN2Chiotpnr4bBS\",\"secretAccessKey\":\"MkEbBsFvMii1K5GreUriTJZxH359B1n28Au9Kaml\",\"bucket\":\"cc-archive\",\"useSSL\":false}"))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	for jobContainer := range s3a.Iter(false) {
 | |
| 		if jobContainer.Meta == nil {
 | |
| 			fmt.Println("Is nil")
 | |
| 		}
 | |
| 	}
 | |
| }
 |